From: Greg Kroah-Hartman Date: Mon, 9 Jun 2014 19:15:00 +0000 (-0700) Subject: 3.4-stable patches X-Git-Tag: v3.14.7~24 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=66fcc5bc3b09a94af6789daf3fd56c7df700a44c;p=thirdparty%2Fkernel%2Fstable-queue.git 3.4-stable patches added patches: sched-fix-hotplug-vs.-set_cpus_allowed_ptr.patch --- diff --git a/queue-3.4/sched-fix-hotplug-vs.-set_cpus_allowed_ptr.patch b/queue-3.4/sched-fix-hotplug-vs.-set_cpus_allowed_ptr.patch new file mode 100644 index 00000000000..acaf2ba3eca --- /dev/null +++ b/queue-3.4/sched-fix-hotplug-vs.-set_cpus_allowed_ptr.patch @@ -0,0 +1,70 @@ +From 6acbfb96976fc3350e30d964acb1dbbdf876d55e Mon Sep 17 00:00:00 2001 +From: Lai Jiangshan +Date: Fri, 16 May 2014 11:50:42 +0800 +Subject: sched: Fix hotplug vs. set_cpus_allowed_ptr() + +From: Lai Jiangshan + +commit 6acbfb96976fc3350e30d964acb1dbbdf876d55e upstream. + +Lai found that: + + WARNING: CPU: 1 PID: 13 at arch/x86/kernel/smp.c:124 native_smp_send_reschedule+0x2d/0x4b() + ... + migration_cpu_stop+0x1d/0x22 + +was caused by set_cpus_allowed_ptr() assuming that cpu_active_mask is +always a sub-set of cpu_online_mask. + +This isn't true since 5fbd036b552f ("sched: Cleanup cpu_active madness"). + +So set active and online at the same time to avoid this particular +problem. + +Fixes: 5fbd036b552f ("sched: Cleanup cpu_active madness") +Signed-off-by: Lai Jiangshan +Signed-off-by: Peter Zijlstra +Cc: Andrew Morton +Cc: Gautham R. Shenoy +Cc: Linus Torvalds +Cc: Michael wang +Cc: Paul Gortmaker +Cc: Rafael J. Wysocki +Cc: Srivatsa S. Bhat +Cc: Toshi Kani +Link: http://lkml.kernel.org/r/53758B12.8060609@cn.fujitsu.com +Signed-off-by: Ingo Molnar +Signed-off-by: Greg Kroah-Hartman + +--- + kernel/cpu.c | 6 ++++-- + kernel/sched/core.c | 1 - + 2 files changed, 4 insertions(+), 3 deletions(-) + +--- a/kernel/cpu.c ++++ b/kernel/cpu.c +@@ -631,10 +631,12 @@ void set_cpu_present(unsigned int cpu, b + + void set_cpu_online(unsigned int cpu, bool online) + { +- if (online) ++ if (online) { + cpumask_set_cpu(cpu, to_cpumask(cpu_online_bits)); +- else ++ cpumask_set_cpu(cpu, to_cpumask(cpu_active_bits)); ++ } else { + cpumask_clear_cpu(cpu, to_cpumask(cpu_online_bits)); ++ } + } + + void set_cpu_active(unsigned int cpu, bool active) +--- a/kernel/sched/core.c ++++ b/kernel/sched/core.c +@@ -5656,7 +5656,6 @@ static int __cpuinit sched_cpu_active(st + unsigned long action, void *hcpu) + { + switch (action & ~CPU_TASKS_FROZEN) { +- case CPU_STARTING: + case CPU_DOWN_FAILED: + set_cpu_active((long)hcpu, true); + return NOTIFY_OK; diff --git a/queue-3.4/series b/queue-3.4/series index b8d4dbcf912..148d5462d70 100644 --- a/queue-3.4/series +++ b/queue-3.4/series @@ -4,3 +4,4 @@ perf-limit-perf_event_attr-sample_period-to-63-bits.patch perf-fix-race-in-removing-an-event.patch mm-memory-failure.c-fix-memory-leak-by-race-between-poison-and-unpoison.patch arm-8051-1-put_user-fix-possible-data-corruption-in-put_user.patch +sched-fix-hotplug-vs.-set_cpus_allowed_ptr.patch