[PATCH] scheduler: convert BUG_ON()s in try_to_wake_up_local() toWARN_ON_ONCE()s

From: Tejun Heo
Date: Mon Mar 18 2013 - 15:22:42 EST

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@xxxxxxxxxx>
Cc: Steven Rostedt <rostedt@xxxxxxxxxxx>
kernel/sched/core.c | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/kernel/sched/core.c b/kernel/sched/core.c
index 7f12624..a2eda4d 100644
--- a/kernel/sched/core.c
+++ b/kernel/sched/core.c
@@ -1498,8 +1498,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;

if (!raw_spin_trylock(&p->pi_lock)) {
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/