Skip to content

Commit

Permalink
sched: Convert BUG_ON()s in try_to_wake_up_local() to WARN_ON_ONCE()s
Browse files Browse the repository at this point in the history
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 <[email protected]>
Acked-by: Steven Rostedt <[email protected]>
Cc: Peter Zijlstra <[email protected]>
Link: http://lkml.kernel.org/r/[email protected]
Signed-off-by: Ingo Molnar <[email protected]>
  • Loading branch information
htejun authored and Ingo Molnar committed Mar 21, 2013
1 parent 7f6575f commit 383efcd
Showing 1 changed file with 4 additions and 2 deletions.
6 changes: 4 additions & 2 deletions kernel/sched/core.c
Original file line number Diff line number Diff line change
Expand Up @@ -1488,8 +1488,10 @@ static void try_to_wake_up_local(struct task_struct *p)
{
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)) {
Expand Down

0 comments on commit 383efcd

Please sign in to comment.