Subversion Repositories HelenOS

Rev

Rev 581 | Rev 625 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 581 Rev 622
Line 61... Line 61...
61
 * @param sl Pointer to spinlock_t structure.
61
 * @param sl Pointer to spinlock_t structure.
62
 */
62
 */
63
void spinlock_lock(spinlock_t *sl)
63
void spinlock_lock(spinlock_t *sl)
64
{
64
{
65
    count_t i = 0;
65
    count_t i = 0;
66
    __address caller = CALLER(sl);
-
 
67
    char *symbol;
66
    char *symbol;
68
    bool deadlock_reported = false;
67
    bool deadlock_reported = false;
69
 
68
 
70
    preemption_disable();
69
    preemption_disable();
71
    while (test_and_set(&sl->val)) {
70
    while (test_and_set(&sl->val)) {
72
        if (i++ > 300000) {
71
        if (i++ > 300000) {
73
            printf("cpu%d: looping on spinlock %p:%s, caller=%p",
72
            printf("cpu%d: looping on spinlock %p:%s, caller=%p",
74
                   CPU->id, sl, sl->name, caller);
73
                   CPU->id, sl, sl->name, CALLER);
75
            symbol = get_symtab_entry(caller);
74
            symbol = get_symtab_entry(CALLER);
76
            if (symbol)
75
            if (symbol)
77
                printf("(%s)", symbol);
76
                printf("(%s)", symbol);
78
            printf("\n");
77
            printf("\n");
79
            i = 0;
78
            i = 0;
80
            deadlock_reported = true;
79
            deadlock_reported = true;