diff options
author | jhb <jhb@FreeBSD.org> | 2013-06-25 18:44:15 +0000 |
---|---|---|
committer | jhb <jhb@FreeBSD.org> | 2013-06-25 18:44:15 +0000 |
commit | 0807c44cdd0226cdd2553f723a00de3d13882321 (patch) | |
tree | 7b07a13eb6ad28065286a3f60650edd2a6a0dc1c /sys/sys/lock.h | |
parent | 43efcb27b6a0f52dec7b605055f5aae35f6d41de (diff) | |
download | FreeBSD-src-0807c44cdd0226cdd2553f723a00de3d13882321.zip FreeBSD-src-0807c44cdd0226cdd2553f723a00de3d13882321.tar.gz |
Several improvements to rmlock(9). Many of these are based on patches
provided by Isilon.
- Add an rm_assert() supporting various lock assertions similar to other
locking primitives. Because rmlocks track readers the assertions are
always fully accurate unlike rw_assert() and sx_assert().
- Flesh out the lock class methods for rmlocks to support sleeping via
condvars and rm_sleep() (but only while holding write locks), rmlock
details in 'show lock' in DDB, and the lc_owner method used by
dtrace.
- Add an internal destroyed cookie so that API functions can assert
that an rmlock is not destroyed.
- Make use of rm_assert() to add various assertions to the API (e.g.
to assert locks are held when an unlock routine is called).
- Give RM_SLEEPABLE locks their own lock class and always use the
rmlock's own lock_object with WITNESS.
- Use THREAD_NO_SLEEPING() / THREAD_SLEEPING_OK() to disallow sleeping
while holding a read lock on an rmlock.
Submitted by: andre
Obtained from: EMC/Isilon
Diffstat (limited to 'sys/sys/lock.h')
-rw-r--r-- | sys/sys/lock.h | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/sys/sys/lock.h b/sys/sys/lock.h index 07651eb..40dc16b 100644 --- a/sys/sys/lock.h +++ b/sys/sys/lock.h @@ -193,6 +193,7 @@ extern struct lock_class lock_class_mtx_spin; extern struct lock_class lock_class_sx; extern struct lock_class lock_class_rw; extern struct lock_class lock_class_rm; +extern struct lock_class lock_class_rm_sleepable; extern struct lock_class lock_class_lockmgr; extern struct lock_class *lock_classes[]; |