| From 383efcd00053ec40023010ce5034bd702e7ab373 Mon Sep 17 00:00:00 2001 |
| From: Tejun Heo <tj@kernel.org> |
| Date: Mon, 18 Mar 2013 12:22:34 -0700 |
| Subject: sched: Convert BUG_ON()s in try_to_wake_up_local() to WARN_ON_ONCE()s |
| |
| From: Tejun Heo <tj@kernel.org> |
| |
| commit 383efcd00053ec40023010ce5034bd702e7ab373 upstream. |
| |
| try_to_wake_up_local() should only be invoked to wake up another |
| task in the same runqueue and BUG_ON()s are used to enforce the |
| rule. Missing try_to_wake_up_local() can stall workqueue |
| execution but such stalls are likely to be finite either by |
| another work item being queued or the one blocked getting |
| unblocked. There's no reason to trigger BUG while holding rq |
| lock crashing the whole system. |
| |
| Convert BUG_ON()s in try_to_wake_up_local() to WARN_ON_ONCE()s. |
| |
| Signed-off-by: Tejun Heo <tj@kernel.org> |
| Acked-by: Steven Rostedt <rostedt@goodmis.org> |
| Cc: Peter Zijlstra <peterz@infradead.org> |
| Link: http://lkml.kernel.org/r/20130318192234.GD3042@htj.dyndns.org |
| Signed-off-by: Ingo Molnar <mingo@kernel.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| kernel/sched/core.c | 6 ++++-- |
| 1 file changed, 4 insertions(+), 2 deletions(-) |
| |
| --- a/kernel/sched/core.c |
| +++ b/kernel/sched/core.c |
| @@ -1488,8 +1488,10 @@ static void try_to_wake_up_local(struct |
| { |
| struct rq *rq = task_rq(p); |
| |
| - BUG_ON(rq != this_rq()); |
| - BUG_ON(p == current); |
| + if (WARN_ON_ONCE(rq != this_rq()) || |
| + WARN_ON_ONCE(p == current)) |
| + return; |
| + |
| lockdep_assert_held(&rq->lock); |
| |
| if (!raw_spin_trylock(&p->pi_lock)) { |