aboutsummaryrefslogtreecommitdiff
path: root/sys/kern/kern_rwlock.c
diff options
context:
space:
mode:
authorJohn Baldwin <jhb@FreeBSD.org>2006-07-27 21:45:55 +0000
committerJohn Baldwin <jhb@FreeBSD.org>2006-07-27 21:45:55 +0000
commit764e4d54e9d5ea383b7ef04841155e4fc68f9082 (patch)
tree6aa25b1f8f1ba91bd0c1aa70c6b9d4dae14a8068 /sys/kern/kern_rwlock.c
parent0c5d1dbd43050e656d207de7a88a390bdda0f41a (diff)
downloadsrc-764e4d54e9d5ea383b7ef04841155e4fc68f9082.tar.gz
src-764e4d54e9d5ea383b7ef04841155e4fc68f9082.zip
Adjust td_locks for non-spin mutexes, rwlocks, and sx locks so that it is
a count of all non-spin locks, not just lockmgr locks. This can give us a much cheaper way to see if we have any locks held (such as when returning to userland via userret()) without requiring WITNESS. MFC after: 1 week
Notes
Notes: svn path=/head/; revision=160771
Diffstat (limited to 'sys/kern/kern_rwlock.c')
-rw-r--r--sys/kern/kern_rwlock.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/sys/kern/kern_rwlock.c b/sys/kern/kern_rwlock.c
index 70a5985c797f..424afdc1e6ae 100644
--- a/sys/kern/kern_rwlock.c
+++ b/sys/kern/kern_rwlock.c
@@ -119,6 +119,7 @@ _rw_wlock(struct rwlock *rw, const char *file, int line)
__rw_wlock(rw, curthread, file, line);
LOCK_LOG_LOCK("WLOCK", &rw->rw_object, 0, 0, file, line);
WITNESS_LOCK(&rw->rw_object, LOP_EXCLUSIVE, file, line);
+ curthread->td_locks++;
}
void
@@ -127,6 +128,7 @@ _rw_wunlock(struct rwlock *rw, const char *file, int line)
MPASS(curthread != NULL);
_rw_assert(rw, RA_WLOCKED, file, line);
+ curthread->td_locks--;
WITNESS_UNLOCK(&rw->rw_object, LOP_EXCLUSIVE, file, line);
LOCK_LOG_LOCK("WUNLOCK", &rw->rw_object, 0, 0, file, line);
__rw_wunlock(rw, curthread, file, line);
@@ -266,6 +268,7 @@ _rw_rlock(struct rwlock *rw, const char *file, int line)
LOCK_LOG_LOCK("RLOCK", &rw->rw_object, 0, 0, file, line);
WITNESS_LOCK(&rw->rw_object, 0, file, line);
+ curthread->td_locks++;
}
void
@@ -275,6 +278,7 @@ _rw_runlock(struct rwlock *rw, const char *file, int line)
uintptr_t x;
_rw_assert(rw, RA_RLOCKED, file, line);
+ curthread->td_locks--;
WITNESS_UNLOCK(&rw->rw_object, 0, file, line);
LOCK_LOG_LOCK("RUNLOCK", &rw->rw_object, 0, 0, file, line);