version 1.41.4.2, 2011/04/21 01:42:09 |
version 1.42, 2010/09/24 22:51:50 |
Line 48 __KERNEL_RCSID(0, "$NetBSD$"); |
|
Line 48 __KERNEL_RCSID(0, "$NetBSD$"); |
|
#include <sys/cpu.h> |
#include <sys/cpu.h> |
#include <sys/atomic.h> |
#include <sys/atomic.h> |
#include <sys/lock.h> |
#include <sys/lock.h> |
#include <sys/rbtree.h> |
#include <sys/rb.h> |
|
|
#include <machine/lock.h> |
#include <machine/lock.h> |
|
|
Line 572 lockdebug_unlocked(volatile void *lock, |
|
Line 572 lockdebug_unlocked(volatile void *lock, |
|
"not held by current LWP", true); |
"not held by current LWP", true); |
return; |
return; |
} |
} |
|
ld->ld_flags &= ~LD_LOCKED; |
|
ld->ld_unlocked = where; |
|
ld->ld_lwp = NULL; |
TAILQ_REMOVE(&l->l_ld_locks, ld, ld_chain); |
TAILQ_REMOVE(&l->l_ld_locks, ld, ld_chain); |
} else { |
} else { |
if (ld->ld_cpu != (uint16_t)cpu_index(curcpu())) { |
if (ld->ld_cpu != (uint16_t)cpu_index(curcpu())) { |
Line 579 lockdebug_unlocked(volatile void *lock, |
|
Line 582 lockdebug_unlocked(volatile void *lock, |
|
"not held by current CPU", true); |
"not held by current CPU", true); |
return; |
return; |
} |
} |
|
ld->ld_flags &= ~LD_LOCKED; |
|
ld->ld_unlocked = where; |
|
ld->ld_lwp = NULL; |
TAILQ_REMOVE(&curcpu()->ci_data.cpu_ld_locks, ld, |
TAILQ_REMOVE(&curcpu()->ci_data.cpu_ld_locks, ld, |
ld_chain); |
ld_chain); |
} |
} |
ld->ld_flags &= ~LD_LOCKED; |
|
ld->ld_unlocked = where; |
|
ld->ld_lwp = NULL; |
|
} |
} |
__cpu_simple_unlock(&ld->ld_spinlock); |
__cpu_simple_unlock(&ld->ld_spinlock); |
splx(s); |
splx(s); |
Line 730 lockdebug_dump(lockdebug_t *ld, void (*p |
|
Line 733 lockdebug_dump(lockdebug_t *ld, void (*p |
|
"shares wanted: %18u exclusive: %18u\n" |
"shares wanted: %18u exclusive: %18u\n" |
"current cpu : %18u last held: %18u\n" |
"current cpu : %18u last held: %18u\n" |
"current lwp : %#018lx last held: %#018lx\n" |
"current lwp : %#018lx last held: %#018lx\n" |
"last locked%c : %#018lx unlocked%c: %#018lx\n", |
"last locked : %#018lx unlocked : %#018lx\n", |
(unsigned)ld->ld_shares, ((ld->ld_flags & LD_LOCKED) != 0), |
(unsigned)ld->ld_shares, ((ld->ld_flags & LD_LOCKED) != 0), |
(unsigned)ld->ld_shwant, (unsigned)ld->ld_exwant, |
(unsigned)ld->ld_shwant, (unsigned)ld->ld_exwant, |
(unsigned)cpu_index(curcpu()), (unsigned)ld->ld_cpu, |
(unsigned)cpu_index(curcpu()), (unsigned)ld->ld_cpu, |
(long)curlwp, (long)ld->ld_lwp, |
(long)curlwp, (long)ld->ld_lwp, |
((ld->ld_flags & LD_LOCKED) ? '*' : ' '), |
(long)ld->ld_locked, (long)ld->ld_unlocked); |
(long)ld->ld_locked, |
|
((ld->ld_flags & LD_LOCKED) ? ' ' : '*'), |
|
(long)ld->ld_unlocked); |
|
} |
} |
|
|
if (ld->ld_lockops->lo_dump != NULL) |
if (ld->ld_lockops->lo_dump != NULL) |