]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
locking: Add lock context annotations in the spinlock implementation
authorBart Van Assche <bvanassche@acm.org>
Fri, 13 Mar 2026 17:15:09 +0000 (10:15 -0700)
committerPeter Zijlstra <peterz@infradead.org>
Mon, 16 Mar 2026 12:16:50 +0000 (13:16 +0100)
Make the spinlock implementation compatible with lock context analysis
(CONTEXT_ANALYSIS := 1) by adding lock context annotations to the
_raw_##op##_...() macros.

Signed-off-by: Bart Van Assche <bvanassche@acm.org>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Link: https://patch.msgid.link/20260313171510.230998-4-bvanassche@acm.org
kernel/locking/spinlock.c

index 7685defd7c5262e47815e250f6c7a3b377231987..b42d293da38b0859cb2ae4e8067a0416c7edd6d3 100644 (file)
@@ -64,8 +64,9 @@ EXPORT_PER_CPU_SYMBOL(__mmiowb_state);
  * time (making _this_ CPU preemptible if possible), and we also signal
  * towards that other CPU that it should break the lock ASAP.
  */
-#define BUILD_LOCK_OPS(op, locktype)                                   \
+#define BUILD_LOCK_OPS(op, locktype, lock_ctx_op)                      \
 static void __lockfunc __raw_##op##_lock(locktype##_t *lock)           \
+       lock_ctx_op(lock)                                               \
 {                                                                      \
        for (;;) {                                                      \
                preempt_disable();                                      \
@@ -78,6 +79,7 @@ static void __lockfunc __raw_##op##_lock(locktype##_t *lock)          \
 }                                                                      \
                                                                        \
 static unsigned long __lockfunc __raw_##op##_lock_irqsave(locktype##_t *lock) \
+       lock_ctx_op(lock)                                               \
 {                                                                      \
        unsigned long flags;                                            \
                                                                        \
@@ -96,11 +98,13 @@ static unsigned long __lockfunc __raw_##op##_lock_irqsave(locktype##_t *lock) \
 }                                                                      \
                                                                        \
 static void __lockfunc __raw_##op##_lock_irq(locktype##_t *lock)       \
+       lock_ctx_op(lock)                                               \
 {                                                                      \
        _raw_##op##_lock_irqsave(lock);                                 \
 }                                                                      \
                                                                        \
 static void __lockfunc __raw_##op##_lock_bh(locktype##_t *lock)                \
+       lock_ctx_op(lock)                                               \
 {                                                                      \
        unsigned long flags;                                            \
                                                                        \
@@ -123,11 +127,11 @@ static void __lockfunc __raw_##op##_lock_bh(locktype##_t *lock)           \
  *         __[spin|read|write]_lock_irqsave()
  *         __[spin|read|write]_lock_bh()
  */
-BUILD_LOCK_OPS(spin, raw_spinlock);
+BUILD_LOCK_OPS(spin, raw_spinlock, __acquires);
 
 #ifndef CONFIG_PREEMPT_RT
-BUILD_LOCK_OPS(read, rwlock);
-BUILD_LOCK_OPS(write, rwlock);
+BUILD_LOCK_OPS(read, rwlock, __acquires_shared);
+BUILD_LOCK_OPS(write, rwlock, __acquires);
 #endif
 
 #endif