• Hoeun Ryu's avatar
    arm64: kexec: have own crash_smp_send_stop() for crash dump for nonpanic cores · a88ce63b
    Hoeun Ryu authored
     Commit 0ee59413 : (x86/panic: replace smp_send_stop() with kdump friendly
    version in panic path) introduced crash_smp_send_stop() which is a weak
    function and can be overridden by architecture codes to fix the side effect
    caused by commit f06e5153 : (kernel/panic.c: add "crash_kexec_post_
    notifiers" option).
    
     ARM64 architecture uses the weak version function and the problem is that
    the weak function simply calls smp_send_stop() which makes other CPUs
    offline and takes away the chance to save crash information for nonpanic
    CPUs in machine_crash_shutdown() when crash_kexec_post_notifiers kernel
    option is enabled.
    
     Calling smp_send_crash_stop() in machine_crash_shutdown() is useless
    because all nonpanic CPUs are already offline by smp_send_stop() in this
    case and smp_send_crash_stop() only works against online CPUs.
    
     The result is that secondary CPUs registers are not saved by
    crash_save_cpu() and the vmcore file misreports these CPUs as being
    offline.
    
     crash_smp_send_stop() is implemented to fix this problem by replacing the
    existing smp_send_crash_stop() and adding a check for multiple calling to
    the function. The function (strong symbol version) saves crash information
    for nonpanic CPUs and machine_crash_shutdown() tries to save crash
    information for nonpanic CPUs only when crash_kexec_post_notifiers kernel
    option is disabled.
    
    * crash_kexec_post_notifiers : false
    
      panic()
        __crash_kexec()
          machine_crash_shutdown()
            crash_smp_send_stop()    <= save crash dump for nonpanic cores
    
    * crash_kexec_post_notifiers : true
    
      panic()
        crash_smp_send_stop()        <= save crash dump for nonpanic cores
        __crash_kexec()
          machine_crash_shutdown()
            crash_smp_send_stop()    <= just return.
    Signed-off-by: default avatarHoeun Ryu <hoeun.ryu@gmail.com>
    Reviewed-by: default avatarJames Morse <james.morse@arm.com>
    Tested-by: default avatarJames Morse <james.morse@arm.com>
    Signed-off-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
    a88ce63b
machine_kexec.c 9.51 KB