sched: fix cpu hotplug
authorDmitry Adamushko <dmitry.adamushko@gmail.com>
Wed, 9 Jul 2008 22:32:40 +0000 (00:32 +0200)
committerIngo Molnar <mingo@elte.hu>
Thu, 10 Jul 2008 07:35:34 +0000 (09:35 +0200)
commitdc7fab8b3bb388c57c6c4a43ba68c8a32ca25204
tree4f96ecc3625b3af71d00592f0e47841b8ab849a7
parent619b0488038224391e64fa03854651ca0f5efe56
sched: fix cpu hotplug

I think we may have a race between try_to_wake_up() and
migrate_live_tasks() -> move_task_off_dead_cpu() when the later one
may end up looping endlessly.

Interrupts are enabled on other CPUs when migration_call(CPU_DEAD, ...) is
called so we may get a race between try_to_wake_up() and
migrate_live_tasks() -> move_task_off_dead_cpu(). The former one may push
a task out of a dead CPU causing the later one to loop endlessly.

Heiko Carstens observed:

| That's exactly what explains a dump I got yesterday. Thanks for fixing! :)

Signed-off-by: Dmitry Adamushko <dmitry.adamushko@gmail.com>
Cc: miaox@cn.fujitsu.com
Cc: Lai Jiangshan <laijs@cn.fujitsu.com>
Cc: Heiko Carstens <heiko.carstens@de.ibm.com>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Avi Kivity <avi@qumranet.com>
Cc: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
kernel/sched.c