aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMateusz Guzik <mjg@FreeBSD.org>2021-09-11 18:23:51 +0000
committerMateusz Guzik <mjg@FreeBSD.org>2021-09-18 10:16:58 +0000
commitf902e4bb04ad717935a97ce1ae59e2dd389d940d (patch)
tree8147498e13caa2d4f013ffcd364b6bdf0b3ba66f
parenta2cb65b8fe975a8f228258e3057b62e068dbf8e2 (diff)
downloadsrc-f902e4bb04ad717935a97ce1ae59e2dd389d940d.tar.gz
src-f902e4bb04ad717935a97ce1ae59e2dd389d940d.zip
lockmgr: fix lock profiling of face adaptive spinning
-rw-r--r--sys/kern/kern_lock.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/sys/kern/kern_lock.c b/sys/kern/kern_lock.c
index bec49f29d162..2eb4feb7c4b5 100644
--- a/sys/kern/kern_lock.c
+++ b/sys/kern/kern_lock.c
@@ -631,6 +631,9 @@ lockmgr_slock_hard(struct lock *lk, u_int flags, struct lock_object *ilk,
if (lockmgr_slock_try(lk, &x, flags, false))
break;
+ lock_profile_obtain_lock_failed(&lk->lock_object, false,
+ &contested, &waittime);
+
if ((flags & (LK_ADAPTIVE | LK_INTERLOCK)) == LK_ADAPTIVE) {
if (lockmgr_slock_adaptive(&lda, lk, &x, flags))
continue;
@@ -639,8 +642,6 @@ lockmgr_slock_hard(struct lock *lk, u_int flags, struct lock_object *ilk,
#ifdef HWPMC_HOOKS
PMC_SOFT_CALL( , , lock, failed);
#endif
- lock_profile_obtain_lock_failed(&lk->lock_object, false,
- &contested, &waittime);
/*
* If the lock is expected to not sleep just give up
@@ -845,6 +846,10 @@ lockmgr_xlock_hard(struct lock *lk, u_int flags, struct lock_object *ilk,
break;
continue;
}
+
+ lock_profile_obtain_lock_failed(&lk->lock_object, false,
+ &contested, &waittime);
+
if ((flags & (LK_ADAPTIVE | LK_INTERLOCK)) == LK_ADAPTIVE) {
if (lockmgr_xlock_adaptive(&lda, lk, &x))
continue;
@@ -852,8 +857,6 @@ lockmgr_xlock_hard(struct lock *lk, u_int flags, struct lock_object *ilk,
#ifdef HWPMC_HOOKS
PMC_SOFT_CALL( , , lock, failed);
#endif
- lock_profile_obtain_lock_failed(&lk->lock_object, false,
- &contested, &waittime);
/*
* If the lock is expected to not sleep just give up