Commit 8bf6c677 authored by Sebastian Siewior's avatar Sebastian Siewior Committed by Peter Zijlstra
Browse files

completion: Use lockdep_assert_RT_in_threaded_ctx() in complete_all()



The warning was intended to spot complete_all() users from hardirq
context on PREEMPT_RT. The warning as-is will also trigger in interrupt
handlers, which are threaded on PREEMPT_RT, which was not intended.

Use lockdep_assert_RT_in_threaded_ctx() which triggers in non-preemptive
context on PREEMPT_RT.

Fixes: a5c6234e ("completion: Use simple wait queues")
Reported-by: default avatarkernel test robot <rong.a.chen@intel.com>
Suggested-by: default avatarPeter Zijlstra <peterz@infradead.org>
Signed-off-by: default avatarSebastian Andrzej Siewior <bigeasy@linutronix.de>
Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
Link: https://lkml.kernel.org/r/20200323152019.4qjwluldohuh3by5@linutronix.de
parent d53f2b62
Loading
Loading
Loading
Loading
+15 −0
Original line number Diff line number Diff line
@@ -711,6 +711,21 @@ do { \
# define lockdep_assert_in_irq() do { } while (0)
#endif

#ifdef CONFIG_PROVE_RAW_LOCK_NESTING

# define lockdep_assert_RT_in_threaded_ctx() do {			\
		WARN_ONCE(debug_locks && !current->lockdep_recursion &&	\
			  current->hardirq_context &&			\
			  !(current->hardirq_threaded || current->irq_config),	\
			  "Not in threaded context on PREEMPT_RT as expected\n");	\
} while (0)

#else

# define lockdep_assert_RT_in_threaded_ctx() do { } while (0)

#endif

#ifdef CONFIG_LOCKDEP
void lockdep_rcu_suspicious(const char *file, const int line, const char *s);
#else
+1 −1
Original line number Diff line number Diff line
@@ -58,7 +58,7 @@ void complete_all(struct completion *x)
{
	unsigned long flags;

	WARN_ON(irqs_disabled());
	lockdep_assert_RT_in_threaded_ctx();

	raw_spin_lock_irqsave(&x->wait.lock, flags);
	x->done = UINT_MAX;