x86/panic: replace smp_send_stop() with kdump friendly version in panic path
authorHidehiro Kawai <[email protected]>
Tue, 11 Oct 2016 20:54:23 +0000 (13:54 -0700)
committerLinus Torvalds <[email protected]>
Tue, 11 Oct 2016 22:06:32 +0000 (15:06 -0700)
commit0ee59413c967c35a6dd2dbdab605b4cd42025ee5
treee3325918b5b8d40924eac2b3cc2f2a1f8467048a
parent2b6b535d9158b822a45080b3d6d5b2993fd49e5a
x86/panic: replace smp_send_stop() with kdump friendly version in panic path

Daniel Walker reported problems which happens when
crash_kexec_post_notifiers kernel option is enabled
(https://lkml.org/lkml/2015/6/24/44).

In that case, smp_send_stop() is called before entering kdump routines
which assume other CPUs are still online.  As the result, for x86, kdump
routines fail to save other CPUs' registers and disable virtualization
extensions.

To fix this problem, call a new kdump friendly function,
crash_smp_send_stop(), instead of the smp_send_stop() when
crash_kexec_post_notifiers is enabled.  crash_smp_send_stop() is a weak
function, and it just call smp_send_stop().  Architecture codes should
override it so that kdump can work appropriately.  This patch only
provides x86-specific version.

For Xen's PV kernel, just keep the current behavior.

NOTES:

- Right solution would be to place crash_smp_send_stop() before
  __crash_kexec() invocation in all cases and remove smp_send_stop(), but
  we can't do that until all architectures implement own
  crash_smp_send_stop()

- crash_smp_send_stop()-like work is still needed by
  machine_crash_shutdown() because crash_kexec() can be called without
  entering panic()

Fixes: f06e5153f4ae (kernel/panic.c: add "crash_kexec_post_notifiers" option)
Link: http://lkml.kernel.org/r/20160810080948.11028.15344.stgit@sysi4-13.yrl.intra.hitachi.co.jp
Signed-off-by: Hidehiro Kawai <[email protected]>
Reported-by: Daniel Walker <[email protected]>
Cc: Dave Young <[email protected]>
Cc: Baoquan He <[email protected]>
Cc: Vivek Goyal <[email protected]>
Cc: Eric Biederman <[email protected]>
Cc: Masami Hiramatsu <[email protected]>
Cc: Daniel Walker <[email protected]>
Cc: Xunlei Pang <[email protected]>
Cc: Thomas Gleixner <[email protected]>
Cc: Ingo Molnar <[email protected]>
Cc: "H. Peter Anvin" <[email protected]>
Cc: Borislav Petkov <[email protected]>
Cc: David Vrabel <[email protected]>
Cc: Toshi Kani <[email protected]>
Cc: Ralf Baechle <[email protected]>
Cc: David Daney <[email protected]>
Cc: Aaro Koskinen <[email protected]>
Cc: "Steven J. Hill" <[email protected]>
Cc: Corey Minyard <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
arch/x86/include/asm/kexec.h
arch/x86/include/asm/smp.h
arch/x86/kernel/crash.c
arch/x86/kernel/smp.c
kernel/panic.c