We introduce a configuration variable for the feature to make it easier for various architectures and/or configs to enable or disable it based on their requirements. Signed-off-by: Gregory Haskins <ghaskins@xxxxxxxxxx> --- kernel/Kconfig.preempt | 9 +++++++++ kernel/spinlock.c | 7 +++---- lib/Kconfig.debug | 1 + 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/kernel/Kconfig.preempt b/kernel/Kconfig.preempt index 41a0d88..5b45213 100644 --- a/kernel/Kconfig.preempt +++ b/kernel/Kconfig.preempt @@ -86,6 +86,15 @@ config PREEMPT default y depends on PREEMPT_DESKTOP || PREEMPT_RT +config DISABLE_PREEMPT_SPINLOCK_WAITERS + bool + default n + +config PREEMPT_SPINLOCK_WAITERS + bool + default y + depends on PREEMPT && SMP && !DISABLE_PREEMPT_SPINLOCK_WAITERS + config PREEMPT_SOFTIRQS bool "Thread Softirqs" default n diff --git a/kernel/spinlock.c b/kernel/spinlock.c index b0e7f02..2e6a904 100644 --- a/kernel/spinlock.c +++ b/kernel/spinlock.c @@ -116,8 +116,7 @@ EXPORT_SYMBOL(__write_trylock_irqsave); * even on CONFIG_PREEMPT, because lockdep assumes that interrupts are * not re-enabled during lock-acquire (which the preempt-spin-ops do): */ -#if !defined(CONFIG_PREEMPT) || !defined(CONFIG_SMP) || \ - defined(CONFIG_DEBUG_LOCK_ALLOC) +#if !defined(CONFIG_PREEMPT_SPINLOCK_WAITERS) void __lockfunc __read_lock(raw_rwlock_t *lock) { @@ -244,7 +243,7 @@ void __lockfunc __write_lock(raw_rwlock_t *lock) EXPORT_SYMBOL(__write_lock); -#else /* CONFIG_PREEMPT: */ +#else /* CONFIG_PREEMPT_SPINLOCK_WAITERS */ /* * This could be a long-held lock. We both prepare to spin for a long @@ -334,7 +333,7 @@ BUILD_LOCK_OPS(spin, raw_spinlock); BUILD_LOCK_OPS(read, raw_rwlock); BUILD_LOCK_OPS(write, raw_rwlock); -#endif /* CONFIG_PREEMPT */ +#endif /* CONFIG_PREEMPT_SPINLOCK_WAITERS */ #ifdef CONFIG_DEBUG_LOCK_ALLOC diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug index 9208791..f2889b2 100644 --- a/lib/Kconfig.debug +++ b/lib/Kconfig.debug @@ -233,6 +233,7 @@ config DEBUG_LOCK_ALLOC bool "Lock debugging: detect incorrect freeing of live locks" depends on DEBUG_KERNEL && TRACE_IRQFLAGS_SUPPORT && STACKTRACE_SUPPORT && LOCKDEP_SUPPORT select DEBUG_SPINLOCK + select DISABLE_PREEMPT_SPINLOCK_WAITERS select DEBUG_MUTEXES select LOCKDEP help - To unsubscribe from this list: send the line "unsubscribe linux-rt-users" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html