aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMateusz Guzik <mjg@FreeBSD.org>2022-08-16 12:22:31 +0000
committerMateusz Guzik <mjg@FreeBSD.org>2022-08-23 19:15:48 +0000
commit9488262679d083ff0de97ff608f6a8a95291b13d (patch)
tree01b6109f1c1e46c8d4cb0b5e771364aa6d69ee52
parent9e4e7bcaef3fcaab66cdecd08b1664ac92cc9a6b (diff)
downloadsrc-9488262679d083ff0de97ff608f6a8a95291b13d.tar.gz
src-9488262679d083ff0de97ff608f6a8a95291b13d.zip
rms: add rms_assert_rlock_ok
So that callers which opportunistically elide the lock can still assert that they can take it. Reviewed by: Differential Revision:
-rw-r--r--sys/kern/kern_rmlock.c2
-rw-r--r--sys/sys/rmlock.h7
2 files changed, 8 insertions, 1 deletions
diff --git a/sys/kern/kern_rmlock.c b/sys/kern/kern_rmlock.c
index d7dea8efc40e..8a39c6b0d880 100644
--- a/sys/kern/kern_rmlock.c
+++ b/sys/kern/kern_rmlock.c
@@ -1025,7 +1025,7 @@ rms_rlock(struct rmslock *rms)
{
struct rmslock_pcpu *pcpu;
- WITNESS_WARN(WARN_GIANTOK | WARN_SLEEPOK, NULL, __func__);
+ rms_assert_rlock_ok(rms);
MPASS(atomic_load_ptr(&rms->owner) != curthread);
critical_enter();
diff --git a/sys/sys/rmlock.h b/sys/sys/rmlock.h
index 5aaf8f039026..6ff561c5e4b0 100644
--- a/sys/sys/rmlock.h
+++ b/sys/sys/rmlock.h
@@ -151,6 +151,13 @@ rms_wowned(struct rmslock *rms)
}
#ifdef INVARIANTS
+#define rms_assert_rlock_ok(x) \
+ WITNESS_WARN(WARN_GIANTOK | WARN_SLEEPOK, NULL, __func__);
+#else
+#define rms_assert_rlock_ok(x)
+#endif
+
+#ifdef INVARIANTS
/*
* For assertion purposes.
*