• Dmitry Adamushko's avatar
    sched: fix cpu hotplug · dc7fab8b
    Dmitry Adamushko authored
    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: default avatarDmitry 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: default avatarIngo Molnar <mingo@elte.hu>
    dc7fab8b
sched.c 213 KB