From 26d94f99af38d69a5d0aeae96eaf96cf36813db1 Mon Sep 17 00:00:00 2001 From: Mark Johnston Date: Fri, 24 Nov 2017 19:02:06 +0000 Subject: [PATCH] Add a missing lockstat:::sx-downgrade probe. We were returning without firing the probe when the lock had no shared waiters. MFC after: 1 week --- sys/kern/kern_sx.c | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/sys/kern/kern_sx.c b/sys/kern/kern_sx.c index 9bcc4021b63b..e9f8459cf373 100644 --- a/sys/kern/kern_sx.c +++ b/sys/kern/kern_sx.c @@ -480,10 +480,8 @@ sx_downgrade_int(struct sx *sx LOCK_FILE_LINE_ARG_DEF) x = sx->sx_lock; if (!(x & SX_LOCK_SHARED_WAITERS) && atomic_cmpset_rel_ptr(&sx->sx_lock, x, SX_SHARERS_LOCK(1) | - (x & SX_LOCK_EXCLUSIVE_WAITERS))) { - LOCK_LOG_LOCK("XDOWNGRADE", &sx->lock_object, 0, 0, file, line); - return; - } + (x & SX_LOCK_EXCLUSIVE_WAITERS))) + goto out; /* * Lock the sleep queue so we can read the waiters bits @@ -504,11 +502,12 @@ sx_downgrade_int(struct sx *sx LOCK_FILE_LINE_ARG_DEF) 0, SQ_SHARED_QUEUE); sleepq_release(&sx->lock_object); - LOCK_LOG_LOCK("XDOWNGRADE", &sx->lock_object, 0, 0, file, line); - LOCKSTAT_RECORD0(sx__downgrade, sx); - if (wakeup_swapper) kick_proc0(); + +out: + LOCK_LOG_LOCK("XDOWNGRADE", &sx->lock_object, 0, 0, file, line); + LOCKSTAT_RECORD0(sx__downgrade, sx); } void