diff options
author | kmacy <kmacy@FreeBSD.org> | 2007-03-02 07:21:20 +0000 |
---|---|---|
committer | kmacy <kmacy@FreeBSD.org> | 2007-03-02 07:21:20 +0000 |
commit | e1b1eae5923c01f8e3a48519bd065108ac5fad4d (patch) | |
tree | ebf400e9b11dfb845d138f5eed5195c04faef4a9 /sys/kern | |
parent | 2d1909f3b99f9a3cb7031477a90f9d71abd25e6d (diff) | |
download | FreeBSD-src-e1b1eae5923c01f8e3a48519bd065108ac5fad4d.zip FreeBSD-src-e1b1eae5923c01f8e3a48519bd065108ac5fad4d.tar.gz |
lock stats updates need to be protected by the lock
Diffstat (limited to 'sys/kern')
-rw-r--r-- | sys/kern/kern_mutex.c | 25 | ||||
-rw-r--r-- | sys/kern/kern_sx.c | 27 |
2 files changed, 8 insertions, 44 deletions
diff --git a/sys/kern/kern_mutex.c b/sys/kern/kern_mutex.c index 00ed475..dc58adb 100644 --- a/sys/kern/kern_mutex.c +++ b/sys/kern/kern_mutex.c @@ -157,9 +157,6 @@ _mtx_lock_flags(struct mtx *m, int opts, const char *file, int line) void _mtx_unlock_flags(struct mtx *m, int opts, const char *file, int line) { -#ifdef LOCK_PROFILING - struct lock_object lo; -#endif MPASS(curthread != NULL); KASSERT(m->mtx_lock != MTX_DESTROYED, ("mtx_unlock() of destroyed mutex @ %s:%d", file, line)); @@ -171,14 +168,9 @@ _mtx_unlock_flags(struct mtx *m, int opts, const char *file, int line) LOCK_LOG_LOCK("UNLOCK", &m->mtx_object, opts, m->mtx_recurse, file, line); mtx_assert(m, MA_OWNED); -#ifdef LOCK_PROFILING - memcpy(&lo, &m->mtx_object, sizeof(lo)); - m->mtx_object.lo_flags &= ~LO_CONTESTED; -#endif + + lock_profile_release_lock(&m->mtx_object); _rel_sleep_lock(m, curthread, opts, file, line); -#ifdef LOCK_PROFILING - lock_profile_release_lock(&lo); -#endif } void @@ -202,9 +194,7 @@ _mtx_lock_spin_flags(struct mtx *m, int opts, const char *file, int line) void _mtx_unlock_spin_flags(struct mtx *m, int opts, const char *file, int line) { -#ifdef LOCK_PROFILING - struct lock_object lo; -#endif + MPASS(curthread != NULL); KASSERT(m->mtx_lock != MTX_DESTROYED, ("mtx_unlock_spin() of destroyed mutex @ %s:%d", file, line)); @@ -215,14 +205,9 @@ _mtx_unlock_spin_flags(struct mtx *m, int opts, const char *file, int line) LOCK_LOG_LOCK("UNLOCK", &m->mtx_object, opts, m->mtx_recurse, file, line); mtx_assert(m, MA_OWNED); -#ifdef LOCK_PROFILING - memcpy(&lo, &m->mtx_object, sizeof(lo)); - m->mtx_object.lo_flags &= ~LO_CONTESTED; -#endif + + lock_profile_release_lock(&m->mtx_object); _rel_spin_lock(m); -#ifdef LOCK_PROFILING - lock_profile_release_lock(&lo); -#endif } /* diff --git a/sys/kern/kern_sx.c b/sys/kern/kern_sx.c index 967d7a5..2109c62 100644 --- a/sys/kern/kern_sx.c +++ b/sys/kern/kern_sx.c @@ -228,10 +228,6 @@ _sx_try_xlock(struct sx *sx, const char *file, int line) void _sx_sunlock(struct sx *sx, const char *file, int line) { -#ifdef LOCK_PROFILING - struct lock_object lo; - int count = -1; -#endif _sx_assert(sx, SX_SLOCKED, file, line); mtx_lock(sx->sx_lock); @@ -241,13 +237,10 @@ _sx_sunlock(struct sx *sx, const char *file, int line) /* Release. */ sx->sx_cnt--; -#ifdef LOCK_PROFILING if (sx->sx_cnt == 0) { - memcpy(&lo, &sx->sx_object, sizeof(lo)); - sx->sx_object.lo_flags &= ~LO_CONTESTED; - count = 0; + lock_profile_release_lock(&sx->sx_object); } -#endif + /* * If we just released the last shared lock, wake any waiters up, giving * exclusive lockers precedence. In order to make sure that exclusive @@ -263,19 +256,11 @@ _sx_sunlock(struct sx *sx, const char *file, int line) LOCK_LOG_LOCK("SUNLOCK", &sx->sx_object, 0, 0, file, line); mtx_unlock(sx->sx_lock); -#ifdef LOCK_PROFILING - if (count == 0) - lock_profile_release_lock(&lo); -#endif } void _sx_xunlock(struct sx *sx, const char *file, int line) { -#ifdef LOCK_PROFILING - struct lock_object lo; -#endif - _sx_assert(sx, SX_XLOCKED, file, line); mtx_lock(sx->sx_lock); MPASS(sx->sx_cnt == -1); @@ -287,10 +272,6 @@ _sx_xunlock(struct sx *sx, const char *file, int line) sx->sx_cnt++; sx->sx_xholder = NULL; -#ifdef LOCK_PROFILING - memcpy(&lo, &sx->sx_object, sizeof(lo)); - sx->sx_object.lo_flags &= ~LO_CONTESTED; -#endif /* * Wake up waiters if there are any. Give precedence to slock waiters. */ @@ -301,10 +282,8 @@ _sx_xunlock(struct sx *sx, const char *file, int line) LOCK_LOG_LOCK("XUNLOCK", &sx->sx_object, 0, 0, file, line); + lock_profile_release_lock(&sx->sx_object); mtx_unlock(sx->sx_lock); -#ifdef LOCK_PROFILING - lock_profile_release_lock(&lo); -#endif } int |