• Kirill Korotaev's avatar
    [PATCH] stop_machine() vs. synchronous IPI send deadlock · 4557398f
    Kirill Korotaev authored
    This fixes deadlock of stop_machine() vs.  synchronous IPI send.  The
    problem is that stop_machine() disables interrupts before disabling
    preemption on other CPUs.  So if another CPU is preempted and then calls
    something like flush_tlb_all() it will deadlock with CPU doing
    stop_machine() and which can't process IPI due to disabled IRQs.
    
    I changed stop_machine() to do the same things exactly as it does on other
    CPUs, i.e.  it should disable preemption first on _all_ CPUs including
    itself and only after that disable IRQs.
    Signed-off-by: default avatarKirill Korotaev <dev@sw.ru>
    Cc: Rusty Russell <rusty@rustcorp.com.au>
    Cc: "Andrey Savochkin" <saw@sawoct.com>
    Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
    4557398f
stop_machine.c 4.84 KB