Atomic, blocking and SRCU notifier head declarations statically initialize
locks or SRCU state that require persistent lockdep class keys.

Apply ASSERT_STATIC_STORAGE() to ATOMIC_NOTIFIER_HEAD(),
BLOCKING_NOTIFIER_HEAD() and the common _SRCU_NOTIFIER_HEAD() wrapper,
including both Tree SRCU and Tiny SRCU variants. Leave RAW_NOTIFIER_HEAD()
unchanged because it has no such initialization requirement.

Assisted-by: OpenAI Codex
Signed-off-by: Yury Norov <[email protected]>
---
 include/linux/notifier.h | 13 +++++++++----
 1 file changed, 9 insertions(+), 4 deletions(-)

diff --git a/include/linux/notifier.h b/include/linux/notifier.h
index 01b6c9d9956f..4f6330360df2 100644
--- a/include/linux/notifier.h
+++ b/include/linux/notifier.h
@@ -10,6 +10,7 @@
  
 #ifndef _LINUX_NOTIFIER_H
 #define _LINUX_NOTIFIER_H
+#include <linux/compiler.h>
 #include <linux/errno.h>
 #include <linux/mutex.h>
 #include <linux/rwsem.h>
@@ -114,10 +115,12 @@ extern void srcu_init_notifier_head(struct 
srcu_notifier_head *nh);
 
 #define ATOMIC_NOTIFIER_HEAD(name)                             \
        struct atomic_notifier_head name =                      \
-               ATOMIC_NOTIFIER_INIT(name)
+               ATOMIC_NOTIFIER_INIT(name);                     \
+       ASSERT_STATIC_STORAGE(name)
 #define BLOCKING_NOTIFIER_HEAD(name)                           \
        struct blocking_notifier_head name =                    \
-               BLOCKING_NOTIFIER_INIT(name)
+               BLOCKING_NOTIFIER_INIT(name);                   \
+       ASSERT_STATIC_STORAGE(name)
 #define RAW_NOTIFIER_HEAD(name)                                        \
        struct raw_notifier_head name =                         \
                RAW_NOTIFIER_INIT(name)
@@ -126,12 +129,14 @@ extern void srcu_init_notifier_head(struct 
srcu_notifier_head *nh);
 #define _SRCU_NOTIFIER_HEAD(name, mod)                         \
        static DEFINE_PER_CPU(struct srcu_data, name##_head_srcu_data); \
        mod struct srcu_notifier_head name =                    \
-                       SRCU_NOTIFIER_INIT(name, name##_head_srcu_data)
+                       SRCU_NOTIFIER_INIT(name, name##_head_srcu_data);        
\
+       ASSERT_STATIC_STORAGE(name)
 
 #else
 #define _SRCU_NOTIFIER_HEAD(name, mod)                         \
        mod struct srcu_notifier_head name =                    \
-                       SRCU_NOTIFIER_INIT(name, name)
+                       SRCU_NOTIFIER_INIT(name, name);         \
+       ASSERT_STATIC_STORAGE(name)
 
 #endif
 
-- 
2.53.0


Reply via email to