Skip to content

Commit 6acbfb9

Browse files
Lai JiangshanIngo Molnar
authored andcommitted
sched: Fix hotplug vs. set_cpus_allowed_ptr()
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 5fbd036 ("sched: Cleanup cpu_active madness"). So set active and online at the same time to avoid this particular problem. Fixes: 5fbd036 ("sched: Cleanup cpu_active madness") Signed-off-by: Lai Jiangshan <[email protected]> Signed-off-by: Peter Zijlstra <[email protected]> Cc: Andrew Morton <[email protected]> Cc: Gautham R. Shenoy <[email protected]> Cc: Linus Torvalds <[email protected]> Cc: Michael wang <[email protected]> Cc: Paul Gortmaker <[email protected]> Cc: Rafael J. Wysocki <[email protected]> Cc: Srivatsa S. Bhat <[email protected]> Cc: Toshi Kani <[email protected]> Link: http://lkml.kernel.org/r/[email protected] Signed-off-by: Ingo Molnar <[email protected]>
1 parent 4dac0b6 commit 6acbfb9

File tree

2 files changed

+4
-3
lines changed

2 files changed

+4
-3
lines changed

kernel/cpu.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -726,10 +726,12 @@ void set_cpu_present(unsigned int cpu, bool present)
726726

727727
void set_cpu_online(unsigned int cpu, bool online)
728728
{
729-
if (online)
729+
if (online) {
730730
cpumask_set_cpu(cpu, to_cpumask(cpu_online_bits));
731-
else
731+
cpumask_set_cpu(cpu, to_cpumask(cpu_active_bits));
732+
} else {
732733
cpumask_clear_cpu(cpu, to_cpumask(cpu_online_bits));
734+
}
733735
}
734736

735737
void set_cpu_active(unsigned int cpu, bool active)

kernel/sched/core.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5076,7 +5076,6 @@ static int sched_cpu_active(struct notifier_block *nfb,
50765076
unsigned long action, void *hcpu)
50775077
{
50785078
switch (action & ~CPU_TASKS_FROZEN) {
5079-
case CPU_STARTING:
50805079
case CPU_DOWN_FAILED:
50815080
set_cpu_active((long)hcpu, true);
50825081
return NOTIFY_OK;

0 commit comments

Comments
 (0)