mirror of
https://github.com/torvalds/linux.git
synced 2026-04-18 06:44:00 -04:00
locking: Add lock context annotations in the spinlock implementation
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
This commit is contained in:
committed by
Peter Zijlstra
parent
c4d3b8c77d
commit
b06e988c4c
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user