Messages in this thread Patch in this message | | | From | Sebastian Andrzej Siewior <> | Subject | [PATCH 2/2] locking: Provide spin_is_contended() on PREEMPT_RT | Date | Mon, 6 Sep 2021 16:30:04 +0200 |
| |
spin_is_contended() should return != 0 if there is a waiter pending on the lock. This can be checked on PREEMPT_RT's spin lock implementation by checking if the lock as any waiters pending.
Provide spin_is_contended() on PREEMPT_RT by checking if there are any waiters.
Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> --- include/linux/spinlock_rt.h | 3 ++- kernel/locking/spinlock_rt.c | 6 ++++++ 2 files changed, 8 insertions(+), 1 deletion(-)
diff --git a/include/linux/spinlock_rt.h b/include/linux/spinlock_rt.h index 835aedaf68acd..844bc8f9cf091 100644 --- a/include/linux/spinlock_rt.h +++ b/include/linux/spinlock_rt.h @@ -39,6 +39,7 @@ extern void rt_spin_unlock(spinlock_t *lock); extern void rt_spin_lock_unlock(spinlock_t *lock); extern int rt_spin_trylock_bh(spinlock_t *lock); extern int rt_spin_trylock(spinlock_t *lock); +extern int rt_spin_is_contended(spinlock_t *lock); static __always_inline void spin_lock(spinlock_t *lock) { @@ -145,7 +146,7 @@ static __always_inline void spin_unlock_irqrestore(spinlock_t *lock, #define spin_trylock_irqsave(lock, flags) \ __cond_lock(lock, __spin_trylock_irqsave(lock, flags)) -#define spin_is_contended(lock) (((void)(lock), 0)) +#define spin_is_contended(lock) rt_spin_is_contended(lock) static inline int spin_is_locked(spinlock_t *lock) { diff --git a/kernel/locking/spinlock_rt.c b/kernel/locking/spinlock_rt.c index d2912e44d61fd..c9acb665277ff 100644 --- a/kernel/locking/spinlock_rt.c +++ b/kernel/locking/spinlock_rt.c @@ -118,6 +118,12 @@ int __sched rt_spin_trylock_bh(spinlock_t *lock) } EXPORT_SYMBOL(rt_spin_trylock_bh); +int __sched rt_spin_is_contended(spinlock_t *lock) +{ + return rt_mutex_has_waiters(&lock->lock); +} +EXPORT_SYMBOL(rt_spin_is_contended); + #ifdef CONFIG_DEBUG_LOCK_ALLOC void __rt_spin_lock_init(spinlock_t *lock, const char *name, struct lock_class_key *key, bool percpu) -- 2.33.0
| |