aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/include/linux/lockdep.h
diff options
context:
space:
mode:
authorJakub Kicinski <kuba@kernel.org>2020-09-16 11:45:27 -0700
committerPaul E. McKenney <paulmck@kernel.org>2020-11-02 17:10:01 -0800
commitcd539cff9470fe1dacf0bf5ab3f54f37b854d6fc (patch)
tree56726e0cb2c66c6a42956c9bc7e1ec1052172b1a /include/linux/lockdep.h
parentsrcu: Use a more appropriate lockdep helper (diff)
downloadwireguard-linux-cd539cff9470fe1dacf0bf5ab3f54f37b854d6fc.tar.xz
wireguard-linux-cd539cff9470fe1dacf0bf5ab3f54f37b854d6fc.zip
lockdep: Provide dummy forward declaration of *_is_held() helpers
When CONFIG_LOCKDEP is not set, lock_is_held() and lockdep_is_held() are not declared or defined. This forces all callers to use #ifdefs around these checks. Recent RCU changes added a lot of lockdep_is_held() calls inside rcu_dereference_protected(). This macro hides its argument on !LOCKDEP builds, which can lead to false-positive unused-variable warnings. This commit therefore provides forward declarations of lock_is_held() and lockdep_is_held() but without defining them. This way callers (including those internal to RCU) can keep them visible to the compiler on !LOCKDEP builds and instead depend on dead code elimination to remove the references, which in turn prevents the linker from complaining about the lack of the corresponding function definitions. [ paulmck: Apply Peter Zijlstra feedback on "extern". ] Signed-off-by: Jakub Kicinski <kuba@kernel.org> -- CC: peterz@infradead.org CC: mingo@redhat.com CC: will@kernel.org Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
Diffstat (limited to 'include/linux/lockdep.h')
-rw-r--r--include/linux/lockdep.h6
1 files changed, 6 insertions, 0 deletions
diff --git a/include/linux/lockdep.h b/include/linux/lockdep.h
index f5594879175a..ccc3ce66c7e0 100644
--- a/include/linux/lockdep.h
+++ b/include/linux/lockdep.h
@@ -375,6 +375,12 @@ static inline void lockdep_unregister_key(struct lock_class_key *key)
#define lockdep_depth(tsk) (0)
+/*
+ * Dummy forward declarations, allow users to write less ifdef-y code
+ * and depend on dead code elimination.
+ */
+extern int lock_is_held(const void *);
+extern int lockdep_is_held(const void *);
#define lockdep_is_held_type(l, r) (1)
#define lockdep_assert_held(l) do { (void)(l); } while (0)