From 05549176468b0134e9c2f8ef3234845b43532b44 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Fri, 19 Apr 2013 15:28:52 -0700 Subject: [PATCH] 3.4-stable patches added patches: sched-convert-bug_on-s-in-try_to_wake_up_local-to-warn_on_once-s.patch --- ...y_to_wake_up_local-to-warn_on_once-s.patch | 45 +++++++++++++++++++ queue-3.4/series | 1 + 2 files changed, 46 insertions(+) create mode 100644 queue-3.4/sched-convert-bug_on-s-in-try_to_wake_up_local-to-warn_on_once-s.patch diff --git a/queue-3.4/sched-convert-bug_on-s-in-try_to_wake_up_local-to-warn_on_once-s.patch b/queue-3.4/sched-convert-bug_on-s-in-try_to_wake_up_local-to-warn_on_once-s.patch new file mode 100644 index 00000000000..b01f380af35 --- /dev/null +++ b/queue-3.4/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/core.c | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +--- a/kernel/sched/core.c ++++ b/kernel/sched/core.c +@@ -1653,8 +1653,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.4/series b/queue-3.4/series index a2ed429b9c1..8a7a8f8a892 100644 --- a/queue-3.4/series +++ b/queue-3.4/series @@ -8,3 +8,4 @@ kvm-x86-fix-for-buffer-overflow-in-handling-of-msr_kvm_system_time-cve-2013-1796 kvm-x86-convert-msr_kvm_system_time-to-use-gfn_to_hva_cache-functions-cve-2013-1797.patch kvm-fix-bounds-checking-in-ioapic-indirect-register-reads-cve-2013-1798.patch kvm-allow-cross-page-reads-and-writes-from-cached-translations.patch +sched-convert-bug_on-s-in-try_to_wake_up_local-to-warn_on_once-s.patch -- 2.47.3