From: Greg Kroah-Hartman Date: Mon, 22 Apr 2013 15:33:39 +0000 (-0700) Subject: 3.0-stable patches X-Git-Tag: v3.8.9~20 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=2bdcf33b3e504391fe5085d6b6ad353bdcb506f5;p=thirdparty%2Fkernel%2Fstable-queue.git 3.0-stable patches added patches: sched-convert-bug_on-s-in-try_to_wake_up_local-to-warn_on_once-s.patch --- diff --git a/queue-3.0/sched-convert-bug_on-s-in-try_to_wake_up_local-to-warn_on_once-s.patch b/queue-3.0/sched-convert-bug_on-s-in-try_to_wake_up_local-to-warn_on_once-s.patch new file mode 100644 index 00000000000..aad0d8e6b9c --- /dev/null +++ b/queue-3.0/sched-convert-bug_on-s-in-try_to_wake_up_local-to-warn_on_once-s.patch @@ -0,0 +1,45 @@ +From 383efcd00053ec40023010ce5034bd702e7ab373 Mon Sep 17 00:00:00 2001 +From: Tejun Heo +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 + +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 +Acked-by: Steven Rostedt +Cc: Peter Zijlstra +Link: http://lkml.kernel.org/r/20130318192234.GD3042@htj.dyndns.org +Signed-off-by: Ingo Molnar +Signed-off-by: Greg Kroah-Hartman + +--- + kernel/sched.c | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +--- a/kernel/sched.c ++++ b/kernel/sched.c +@@ -2743,8 +2743,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)) { diff --git a/queue-3.0/series b/queue-3.0/series index 4ca2e007d1f..31ef644a443 100644 --- a/queue-3.0/series +++ b/queue-3.0/series @@ -11,3 +11,4 @@ kvm-allow-cross-page-reads-and-writes-from-cached-translations.patch arm-7696-1-fix-kexec-by-setting-outer_cache.inv_all-for-feroceon.patch ath9k_htc-accept-1.x-firmware-newer-than-1.3.patch +sched-convert-bug_on-s-in-try_to_wake_up_local-to-warn_on_once-s.patch