diff options
Diffstat (limited to 'spinlock.c')
-rw-r--r-- | spinlock.c | 10 |
1 files changed, 8 insertions, 2 deletions
@@ -8,7 +8,7 @@ // Can't call cprintf from inside these routines, // because cprintf uses them itself. -#define cprintf dont_use_cprintf +//#define cprintf dont_use_cprintf extern int use_console_lock; @@ -21,8 +21,12 @@ getcallerpc(void *v) void acquire(struct spinlock * lock) { - if(holding(lock)) + if(holding(lock)){ + extern use_console_lock; + use_console_lock = 0; + cprintf("lock %s pc %x\n", lock->name ? lock->name : "", lock->pc); panic("acquire"); + } if(cpus[cpu()].nlock++ == 0) cli(); @@ -31,6 +35,7 @@ acquire(struct spinlock * lock) cpuid(0, 0, 0, 0, 0); // memory barrier lock->pc = getcallerpc(&lock); lock->cpu = cpu(); + cpus[cpu()].lastacquire = lock; } void @@ -39,6 +44,7 @@ release(struct spinlock * lock) if(!holding(lock)) panic("release"); + cpus[cpu()].lastrelease = lock; cpuid(0, 0, 0, 0, 0); // memory barrier lock->locked = 0; if(--cpus[cpu()].nlock == 0) |