Convert the lockmgr interlock from a token to a spinlock. This fixes a
authorMatthew Dillon <dillon@dragonflybsd.org>
Sat, 19 Nov 2005 17:19:52 +0000 (17:19 +0000)
committerMatthew Dillon <dillon@dragonflybsd.org>
Sat, 19 Nov 2005 17:19:52 +0000 (17:19 +0000)
commit16523a434bc79e848da515e446cfef6d5c68435f
tree62a7d672e85aa4bc1040b1578d7902c7ffeefee5
parentee07221f578576aef376c97e3dc9615e8438658f
Convert the lockmgr interlock from a token to a spinlock.  This fixes a
problem on SMP boxes where the MP lock would unexpectedly lose atomicy for
a short period of time due to token acquisition.

Add a tsleep_interlock() call which takes advantage of tsleep()'s cpu
locality of reference to provide a helper function which allows us to
atomically spin_unlock() and tsleep() in an MP safe manner with only
a critical section.  Basically all it does is set a cpumask bit for the
ident hash index to cause other cpu's issuing a wakeup to notify our cpu.
Any actual wakeup occuring during the race period after the spin_unlock
but before the tsleep() call will be delayed by the critical section
until after the tsleep has queued the thread.

Cleanup some unused junk in vm_map.h.
sys/kern/kern_lock.c
sys/kern/kern_synch.c
sys/kern/vfs_bio.c
sys/sys/buf.h
sys/sys/buf2.h
sys/sys/lock.h
sys/sys/spinlock2.h
sys/sys/systm.h
sys/vfs/ntfs/ntfs_inode.h
sys/vfs/ntfs/ntfs_subr.c
sys/vm/vm_map.h