• Vitaly Kuznetsov's avatar
    x86/smpboot: Unbreak CPU0 hotplug · 10e66760
    Vitaly Kuznetsov authored
    A hang on CPU0 onlining after a preceding offlining is observed. Trace
    shows that CPU0 is stuck in check_tsc_sync_target() waiting for source
    CPU to run check_tsc_sync_source() but this never happens. Source CPU,
    in its turn, is stuck on synchronize_sched() which is called from
    native_cpu_up() -> do_boot_cpu() -> unregister_nmi_handler().
    
    So it's a classic ABBA deadlock, due to the use of synchronize_sched() in
    unregister_nmi_handler().
    
    Fix the bug by moving unregister_nmi_handler() from do_boot_cpu() to
    native_cpu_up() after cpu onlining is done.
    Signed-off-by: default avatarVitaly Kuznetsov <vkuznets@redhat.com>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Link: http://lkml.kernel.org/r/20170803105818.9934-1-vkuznets@redhat.comSigned-off-by: default avatarIngo Molnar <mingo@kernel.org>
    10e66760
smpboot.c 41.7 KB