Commit b06e988c authored by Bart Van Assche's avatar Bart Van Assche Committed by Peter Zijlstra
Browse files

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: default avatarBart Van Assche <bvanassche@acm.org>
Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
Link: https://patch.msgid.link/20260313171510.230998-4-bvanassche@acm.org
parent c4d3b8c7
Loading
Loading
Loading
Loading
+8 −4
Original line number Diff line number Diff line
@@ -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