summaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
authorDave Young <dyoung@redhat.com>2015-09-09 18:38:55 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2015-09-10 16:29:01 -0400
commit2965faa5e03d1e71e9ff9aa143fff39e0a77543a (patch)
tree78b12008d7078a9cd40e157d5b18b795b14d5d9c /arch
parenta43cac0d9dc2073ff2245a171429ddbe1accece7 (diff)
kexec: split kexec_load syscall from kexec core code
There are two kexec load syscalls, kexec_load another and kexec_file_load. kexec_file_load has been splited as kernel/kexec_file.c. In this patch I split kexec_load syscall code to kernel/kexec.c. And add a new kconfig option KEXEC_CORE, so we can disable kexec_load and use kexec_file_load only, or vice verse. The original requirement is from Ted Ts'o, he want kexec kernel signature being checked with CONFIG_KEXEC_VERIFY_SIG enabled. But kexec-tools use kexec_load syscall can bypass the checking. Vivek Goyal proposed to create a common kconfig option so user can compile in only one syscall for loading kexec kernel. KEXEC/KEXEC_FILE selects KEXEC_CORE so that old config files still work. Because there's general code need CONFIG_KEXEC_CORE, so I updated all the architecture Kconfig with a new option KEXEC_CORE, and let KEXEC selects KEXEC_CORE in arch Kconfig. Also updated general kernel code with to kexec_load syscall. [akpm@linux-foundation.org: coding-style fixes] Signed-off-by: Dave Young <dyoung@redhat.com> Cc: Eric W. Biederman <ebiederm@xmission.com> Cc: Vivek Goyal <vgoyal@redhat.com> Cc: Petr Tesarik <ptesarik@suse.cz> Cc: Theodore Ts'o <tytso@mit.edu> Cc: Josh Boyer <jwboyer@fedoraproject.org> Cc: David Howells <dhowells@redhat.com> Cc: Geert Uytterhoeven <geert@linux-m68k.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'arch')
-rw-r--r--arch/Kconfig3
-rw-r--r--arch/arm/Kconfig1
-rw-r--r--arch/ia64/Kconfig1
-rw-r--r--arch/m68k/Kconfig1
-rw-r--r--arch/mips/Kconfig1
-rw-r--r--arch/powerpc/Kconfig1
-rw-r--r--arch/s390/Kconfig1
-rw-r--r--arch/sh/Kconfig1
-rw-r--r--arch/tile/Kconfig1
-rw-r--r--arch/x86/Kconfig3
-rw-r--r--arch/x86/boot/header.S2
-rw-r--r--arch/x86/include/asm/kdebug.h2
-rw-r--r--arch/x86/kernel/Makefile4
-rw-r--r--arch/x86/kernel/kvmclock.c4
-rw-r--r--arch/x86/kernel/reboot.c4
-rw-r--r--arch/x86/kernel/setup.c2
-rw-r--r--arch/x86/kernel/vmlinux.lds.S2
-rw-r--r--arch/x86/kvm/vmx.c8
-rw-r--r--arch/x86/platform/efi/efi.c4
-rw-r--r--arch/x86/platform/uv/uv_nmi.c6
20 files changed, 32 insertions, 20 deletions
diff --git a/arch/Kconfig b/arch/Kconfig
index 8f3564930580..4e949e58b192 100644
--- a/arch/Kconfig
+++ b/arch/Kconfig
@@ -2,6 +2,9 @@
2# General architecture dependent options 2# General architecture dependent options
3# 3#
4 4
5config KEXEC_CORE
6 bool
7
5config OPROFILE 8config OPROFILE
6 tristate "OProfile system profiling" 9 tristate "OProfile system profiling"
7 depends on PROFILING 10 depends on PROFILING
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
index 0d1b717e1eca..72ad724c67ae 100644
--- a/arch/arm/Kconfig
+++ b/arch/arm/Kconfig
@@ -2020,6 +2020,7 @@ config KEXEC
2020 bool "Kexec system call (EXPERIMENTAL)" 2020 bool "Kexec system call (EXPERIMENTAL)"
2021 depends on (!SMP || PM_SLEEP_SMP) 2021 depends on (!SMP || PM_SLEEP_SMP)
2022 depends on !CPU_V7M 2022 depends on !CPU_V7M
2023 select KEXEC_CORE
2023 help 2024 help
2024 kexec is a system call that implements the ability to shutdown your 2025 kexec is a system call that implements the ability to shutdown your
2025 current kernel, and to start another kernel. It is like a reboot 2026 current kernel, and to start another kernel. It is like a reboot
diff --git a/arch/ia64/Kconfig b/arch/ia64/Kconfig
index 42a91a7aa2b0..eb0249e37981 100644
--- a/arch/ia64/Kconfig
+++ b/arch/ia64/Kconfig
@@ -518,6 +518,7 @@ source "drivers/sn/Kconfig"
518config KEXEC 518config KEXEC
519 bool "kexec system call" 519 bool "kexec system call"
520 depends on !IA64_HP_SIM && (!SMP || HOTPLUG_CPU) 520 depends on !IA64_HP_SIM && (!SMP || HOTPLUG_CPU)
521 select KEXEC_CORE
521 help 522 help
522 kexec is a system call that implements the ability to shutdown your 523 kexec is a system call that implements the ability to shutdown your
523 current kernel, and to start another kernel. It is like a reboot 524 current kernel, and to start another kernel. It is like a reboot
diff --git a/arch/m68k/Kconfig b/arch/m68k/Kconfig
index 2dd8f63bfbbb..498b567f007b 100644
--- a/arch/m68k/Kconfig
+++ b/arch/m68k/Kconfig
@@ -95,6 +95,7 @@ config MMU_SUN3
95config KEXEC 95config KEXEC
96 bool "kexec system call" 96 bool "kexec system call"
97 depends on M68KCLASSIC 97 depends on M68KCLASSIC
98 select KEXEC_CORE
98 help 99 help
99 kexec is a system call that implements the ability to shutdown your 100 kexec is a system call that implements the ability to shutdown your
100 current kernel, and to start another kernel. It is like a reboot 101 current kernel, and to start another kernel. It is like a reboot
diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig
index 752acca8de1f..e3aa5b0b4ef1 100644
--- a/arch/mips/Kconfig
+++ b/arch/mips/Kconfig
@@ -2597,6 +2597,7 @@ source "kernel/Kconfig.preempt"
2597 2597
2598config KEXEC 2598config KEXEC
2599 bool "Kexec system call" 2599 bool "Kexec system call"
2600 select KEXEC_CORE
2600 help 2601 help
2601 kexec is a system call that implements the ability to shutdown your 2602 kexec is a system call that implements the ability to shutdown your
2602 current kernel, and to start another kernel. It is like a reboot 2603 current kernel, and to start another kernel. It is like a reboot
diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig
index b447918b9e2c..9a7057ec2154 100644
--- a/arch/powerpc/Kconfig
+++ b/arch/powerpc/Kconfig
@@ -420,6 +420,7 @@ config PPC64_SUPPORTS_MEMORY_FAILURE
420config KEXEC 420config KEXEC
421 bool "kexec system call" 421 bool "kexec system call"
422 depends on (PPC_BOOK3S || FSL_BOOKE || (44x && !SMP)) 422 depends on (PPC_BOOK3S || FSL_BOOKE || (44x && !SMP))
423 select KEXEC_CORE
423 help 424 help
424 kexec is a system call that implements the ability to shutdown your 425 kexec is a system call that implements the ability to shutdown your
425 current kernel, and to start another kernel. It is like a reboot 426 current kernel, and to start another kernel. It is like a reboot
diff --git a/arch/s390/Kconfig b/arch/s390/Kconfig
index 4827870f7a6d..1d57000b1b24 100644
--- a/arch/s390/Kconfig
+++ b/arch/s390/Kconfig
@@ -48,6 +48,7 @@ config ARCH_SUPPORTS_DEBUG_PAGEALLOC
48 48
49config KEXEC 49config KEXEC
50 def_bool y 50 def_bool y
51 select KEXEC_CORE
51 52
52config AUDIT_ARCH 53config AUDIT_ARCH
53 def_bool y 54 def_bool y
diff --git a/arch/sh/Kconfig b/arch/sh/Kconfig
index 50057fed819d..d514df7e04dd 100644
--- a/arch/sh/Kconfig
+++ b/arch/sh/Kconfig
@@ -602,6 +602,7 @@ source kernel/Kconfig.hz
602config KEXEC 602config KEXEC
603 bool "kexec system call (EXPERIMENTAL)" 603 bool "kexec system call (EXPERIMENTAL)"
604 depends on SUPERH32 && MMU 604 depends on SUPERH32 && MMU
605 select KEXEC_CORE
605 help 606 help
606 kexec is a system call that implements the ability to shutdown your 607 kexec is a system call that implements the ability to shutdown your
607 current kernel, and to start another kernel. It is like a reboot 608 current kernel, and to start another kernel. It is like a reboot
diff --git a/arch/tile/Kconfig b/arch/tile/Kconfig
index 2ba12d761723..106c21bd7f44 100644
--- a/arch/tile/Kconfig
+++ b/arch/tile/Kconfig
@@ -205,6 +205,7 @@ source "kernel/Kconfig.hz"
205 205
206config KEXEC 206config KEXEC
207 bool "kexec system call" 207 bool "kexec system call"
208 select KEXEC_CORE
208 ---help--- 209 ---help---
209 kexec is a system call that implements the ability to shutdown your 210 kexec is a system call that implements the ability to shutdown your
210 current kernel, and to start another kernel. It is like a reboot 211 current kernel, and to start another kernel. It is like a reboot
diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
index cc0d73eac047..7aef2d52daa0 100644
--- a/arch/x86/Kconfig
+++ b/arch/x86/Kconfig
@@ -1754,6 +1754,7 @@ source kernel/Kconfig.hz
1754 1754
1755config KEXEC 1755config KEXEC
1756 bool "kexec system call" 1756 bool "kexec system call"
1757 select KEXEC_CORE
1757 ---help--- 1758 ---help---
1758 kexec is a system call that implements the ability to shutdown your 1759 kexec is a system call that implements the ability to shutdown your
1759 current kernel, and to start another kernel. It is like a reboot 1760 current kernel, and to start another kernel. It is like a reboot
@@ -1770,8 +1771,8 @@ config KEXEC
1770 1771
1771config KEXEC_FILE 1772config KEXEC_FILE
1772 bool "kexec file based system call" 1773 bool "kexec file based system call"
1774 select KEXEC_CORE
1773 select BUILD_BIN2C 1775 select BUILD_BIN2C
1774 depends on KEXEC
1775 depends on X86_64 1776 depends on X86_64
1776 depends on CRYPTO=y 1777 depends on CRYPTO=y
1777 depends on CRYPTO_SHA256=y 1778 depends on CRYPTO_SHA256=y
diff --git a/arch/x86/boot/header.S b/arch/x86/boot/header.S
index 16ef02596db2..2d6b309c8e9a 100644
--- a/arch/x86/boot/header.S
+++ b/arch/x86/boot/header.S
@@ -414,7 +414,7 @@ xloadflags:
414# define XLF23 0 414# define XLF23 0
415#endif 415#endif
416 416
417#if defined(CONFIG_X86_64) && defined(CONFIG_EFI) && defined(CONFIG_KEXEC) 417#if defined(CONFIG_X86_64) && defined(CONFIG_EFI) && defined(CONFIG_KEXEC_CORE)
418# define XLF4 XLF_EFI_KEXEC 418# define XLF4 XLF_EFI_KEXEC
419#else 419#else
420# define XLF4 0 420# define XLF4 0
diff --git a/arch/x86/include/asm/kdebug.h b/arch/x86/include/asm/kdebug.h
index 32ce71375b21..b130d59406fb 100644
--- a/arch/x86/include/asm/kdebug.h
+++ b/arch/x86/include/asm/kdebug.h
@@ -29,7 +29,7 @@ extern void show_trace(struct task_struct *t, struct pt_regs *regs,
29extern void __show_regs(struct pt_regs *regs, int all); 29extern void __show_regs(struct pt_regs *regs, int all);
30extern unsigned long oops_begin(void); 30extern unsigned long oops_begin(void);
31extern void oops_end(unsigned long, struct pt_regs *, int signr); 31extern void oops_end(unsigned long, struct pt_regs *, int signr);
32#ifdef CONFIG_KEXEC 32#ifdef CONFIG_KEXEC_CORE
33extern int in_crash_kexec; 33extern int in_crash_kexec;
34#else 34#else
35/* no crash dump is ever in progress if no crash kernel can be kexec'd */ 35/* no crash dump is ever in progress if no crash kernel can be kexec'd */
diff --git a/arch/x86/kernel/Makefile b/arch/x86/kernel/Makefile
index 9ffdf25e5b86..b1b78ffe01d0 100644
--- a/arch/x86/kernel/Makefile
+++ b/arch/x86/kernel/Makefile
@@ -71,8 +71,8 @@ obj-$(CONFIG_LIVEPATCH) += livepatch.o
71obj-$(CONFIG_FUNCTION_GRAPH_TRACER) += ftrace.o 71obj-$(CONFIG_FUNCTION_GRAPH_TRACER) += ftrace.o
72obj-$(CONFIG_FTRACE_SYSCALLS) += ftrace.o 72obj-$(CONFIG_FTRACE_SYSCALLS) += ftrace.o
73obj-$(CONFIG_X86_TSC) += trace_clock.o 73obj-$(CONFIG_X86_TSC) += trace_clock.o
74obj-$(CONFIG_KEXEC) += machine_kexec_$(BITS).o 74obj-$(CONFIG_KEXEC_CORE) += machine_kexec_$(BITS).o
75obj-$(CONFIG_KEXEC) += relocate_kernel_$(BITS).o crash.o 75obj-$(CONFIG_KEXEC_CORE) += relocate_kernel_$(BITS).o crash.o
76obj-$(CONFIG_KEXEC_FILE) += kexec-bzimage64.o 76obj-$(CONFIG_KEXEC_FILE) += kexec-bzimage64.o
77obj-$(CONFIG_CRASH_DUMP) += crash_dump_$(BITS).o 77obj-$(CONFIG_CRASH_DUMP) += crash_dump_$(BITS).o
78obj-y += kprobes/ 78obj-y += kprobes/
diff --git a/arch/x86/kernel/kvmclock.c b/arch/x86/kernel/kvmclock.c
index 49487b488061..2c7aafa70702 100644
--- a/arch/x86/kernel/kvmclock.c
+++ b/arch/x86/kernel/kvmclock.c
@@ -200,7 +200,7 @@ static void kvm_setup_secondary_clock(void)
200 * kind of shutdown from our side, we unregister the clock by writting anything 200 * kind of shutdown from our side, we unregister the clock by writting anything
201 * that does not have the 'enable' bit set in the msr 201 * that does not have the 'enable' bit set in the msr
202 */ 202 */
203#ifdef CONFIG_KEXEC 203#ifdef CONFIG_KEXEC_CORE
204static void kvm_crash_shutdown(struct pt_regs *regs) 204static void kvm_crash_shutdown(struct pt_regs *regs)
205{ 205{
206 native_write_msr(msr_kvm_system_time, 0, 0); 206 native_write_msr(msr_kvm_system_time, 0, 0);
@@ -259,7 +259,7 @@ void __init kvmclock_init(void)
259 x86_platform.save_sched_clock_state = kvm_save_sched_clock_state; 259 x86_platform.save_sched_clock_state = kvm_save_sched_clock_state;
260 x86_platform.restore_sched_clock_state = kvm_restore_sched_clock_state; 260 x86_platform.restore_sched_clock_state = kvm_restore_sched_clock_state;
261 machine_ops.shutdown = kvm_shutdown; 261 machine_ops.shutdown = kvm_shutdown;
262#ifdef CONFIG_KEXEC 262#ifdef CONFIG_KEXEC_CORE
263 machine_ops.crash_shutdown = kvm_crash_shutdown; 263 machine_ops.crash_shutdown = kvm_crash_shutdown;
264#endif 264#endif
265 kvm_get_preset_lpj(); 265 kvm_get_preset_lpj();
diff --git a/arch/x86/kernel/reboot.c b/arch/x86/kernel/reboot.c
index 86db4bcd7ce5..02693dd9a079 100644
--- a/arch/x86/kernel/reboot.c
+++ b/arch/x86/kernel/reboot.c
@@ -673,7 +673,7 @@ struct machine_ops machine_ops = {
673 .emergency_restart = native_machine_emergency_restart, 673 .emergency_restart = native_machine_emergency_restart,
674 .restart = native_machine_restart, 674 .restart = native_machine_restart,
675 .halt = native_machine_halt, 675 .halt = native_machine_halt,
676#ifdef CONFIG_KEXEC 676#ifdef CONFIG_KEXEC_CORE
677 .crash_shutdown = native_machine_crash_shutdown, 677 .crash_shutdown = native_machine_crash_shutdown,
678#endif 678#endif
679}; 679};
@@ -703,7 +703,7 @@ void machine_halt(void)
703 machine_ops.halt(); 703 machine_ops.halt();
704} 704}
705 705
706#ifdef CONFIG_KEXEC 706#ifdef CONFIG_KEXEC_CORE
707void machine_crash_shutdown(struct pt_regs *regs) 707void machine_crash_shutdown(struct pt_regs *regs)
708{ 708{
709 machine_ops.crash_shutdown(regs); 709 machine_ops.crash_shutdown(regs);
diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c
index baadbf90a7c5..fdb7f2a2d328 100644
--- a/arch/x86/kernel/setup.c
+++ b/arch/x86/kernel/setup.c
@@ -478,7 +478,7 @@ static void __init memblock_x86_reserve_range_setup_data(void)
478 * --------- Crashkernel reservation ------------------------------ 478 * --------- Crashkernel reservation ------------------------------
479 */ 479 */
480 480
481#ifdef CONFIG_KEXEC 481#ifdef CONFIG_KEXEC_CORE
482 482
483/* 483/*
484 * Keep the crash kernel below this limit. On 32 bits earlier kernels 484 * Keep the crash kernel below this limit. On 32 bits earlier kernels
diff --git a/arch/x86/kernel/vmlinux.lds.S b/arch/x86/kernel/vmlinux.lds.S
index 00bf300fd846..74e4bf11f562 100644
--- a/arch/x86/kernel/vmlinux.lds.S
+++ b/arch/x86/kernel/vmlinux.lds.S
@@ -364,7 +364,7 @@ INIT_PER_CPU(irq_stack_union);
364 364
365#endif /* CONFIG_X86_32 */ 365#endif /* CONFIG_X86_32 */
366 366
367#ifdef CONFIG_KEXEC 367#ifdef CONFIG_KEXEC_CORE
368#include <asm/kexec.h> 368#include <asm/kexec.h>
369 369
370. = ASSERT(kexec_control_code_size <= KEXEC_CONTROL_CODE_MAX_SIZE, 370. = ASSERT(kexec_control_code_size <= KEXEC_CONTROL_CODE_MAX_SIZE,
diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c
index 148ea2016022..d01986832afc 100644
--- a/arch/x86/kvm/vmx.c
+++ b/arch/x86/kvm/vmx.c
@@ -1264,7 +1264,7 @@ static void vmcs_load(struct vmcs *vmcs)
1264 vmcs, phys_addr); 1264 vmcs, phys_addr);
1265} 1265}
1266 1266
1267#ifdef CONFIG_KEXEC 1267#ifdef CONFIG_KEXEC_CORE
1268/* 1268/*
1269 * This bitmap is used to indicate whether the vmclear 1269 * This bitmap is used to indicate whether the vmclear
1270 * operation is enabled on all cpus. All disabled by 1270 * operation is enabled on all cpus. All disabled by
@@ -1302,7 +1302,7 @@ static void crash_vmclear_local_loaded_vmcss(void)
1302#else 1302#else
1303static inline void crash_enable_local_vmclear(int cpu) { } 1303static inline void crash_enable_local_vmclear(int cpu) { }
1304static inline void crash_disable_local_vmclear(int cpu) { } 1304static inline void crash_disable_local_vmclear(int cpu) { }
1305#endif /* CONFIG_KEXEC */ 1305#endif /* CONFIG_KEXEC_CORE */
1306 1306
1307static void __loaded_vmcs_clear(void *arg) 1307static void __loaded_vmcs_clear(void *arg)
1308{ 1308{
@@ -10411,7 +10411,7 @@ static int __init vmx_init(void)
10411 if (r) 10411 if (r)
10412 return r; 10412 return r;
10413 10413
10414#ifdef CONFIG_KEXEC 10414#ifdef CONFIG_KEXEC_CORE
10415 rcu_assign_pointer(crash_vmclear_loaded_vmcss, 10415 rcu_assign_pointer(crash_vmclear_loaded_vmcss,
10416 crash_vmclear_local_loaded_vmcss); 10416 crash_vmclear_local_loaded_vmcss);
10417#endif 10417#endif
@@ -10421,7 +10421,7 @@ static int __init vmx_init(void)
10421 10421
10422static void __exit vmx_exit(void) 10422static void __exit vmx_exit(void)
10423{ 10423{
10424#ifdef CONFIG_KEXEC 10424#ifdef CONFIG_KEXEC_CORE
10425 RCU_INIT_POINTER(crash_vmclear_loaded_vmcss, NULL); 10425 RCU_INIT_POINTER(crash_vmclear_loaded_vmcss, NULL);
10426 synchronize_rcu(); 10426 synchronize_rcu();
10427#endif 10427#endif
diff --git a/arch/x86/platform/efi/efi.c b/arch/x86/platform/efi/efi.c
index e4308fe6afe8..1db84c0758b7 100644
--- a/arch/x86/platform/efi/efi.c
+++ b/arch/x86/platform/efi/efi.c
@@ -650,7 +650,7 @@ static void __init get_systab_virt_addr(efi_memory_desc_t *md)
650 650
651static void __init save_runtime_map(void) 651static void __init save_runtime_map(void)
652{ 652{
653#ifdef CONFIG_KEXEC 653#ifdef CONFIG_KEXEC_CORE
654 efi_memory_desc_t *md; 654 efi_memory_desc_t *md;
655 void *tmp, *p, *q = NULL; 655 void *tmp, *p, *q = NULL;
656 int count = 0; 656 int count = 0;
@@ -748,7 +748,7 @@ static void * __init efi_map_regions(int *count, int *pg_shift)
748 748
749static void __init kexec_enter_virtual_mode(void) 749static void __init kexec_enter_virtual_mode(void)
750{ 750{
751#ifdef CONFIG_KEXEC 751#ifdef CONFIG_KEXEC_CORE
752 efi_memory_desc_t *md; 752 efi_memory_desc_t *md;
753 void *p; 753 void *p;
754 754
diff --git a/arch/x86/platform/uv/uv_nmi.c b/arch/x86/platform/uv/uv_nmi.c
index 020c101c255f..5c9f63fa6abf 100644
--- a/arch/x86/platform/uv/uv_nmi.c
+++ b/arch/x86/platform/uv/uv_nmi.c
@@ -492,7 +492,7 @@ static void uv_nmi_touch_watchdogs(void)
492 touch_nmi_watchdog(); 492 touch_nmi_watchdog();
493} 493}
494 494
495#if defined(CONFIG_KEXEC) 495#if defined(CONFIG_KEXEC_CORE)
496static atomic_t uv_nmi_kexec_failed; 496static atomic_t uv_nmi_kexec_failed;
497static void uv_nmi_kdump(int cpu, int master, struct pt_regs *regs) 497static void uv_nmi_kdump(int cpu, int master, struct pt_regs *regs)
498{ 498{
@@ -519,13 +519,13 @@ static void uv_nmi_kdump(int cpu, int master, struct pt_regs *regs)
519 uv_nmi_sync_exit(0); 519 uv_nmi_sync_exit(0);
520} 520}
521 521
522#else /* !CONFIG_KEXEC */ 522#else /* !CONFIG_KEXEC_CORE */
523static inline void uv_nmi_kdump(int cpu, int master, struct pt_regs *regs) 523static inline void uv_nmi_kdump(int cpu, int master, struct pt_regs *regs)
524{ 524{
525 if (master) 525 if (master)
526 pr_err("UV: NMI kdump: KEXEC not supported in this kernel\n"); 526 pr_err("UV: NMI kdump: KEXEC not supported in this kernel\n");
527} 527}
528#endif /* !CONFIG_KEXEC */ 528#endif /* !CONFIG_KEXEC_CORE */
529 529
530#ifdef CONFIG_KGDB 530#ifdef CONFIG_KGDB
531#ifdef CONFIG_KGDB_KDB 531#ifdef CONFIG_KGDB_KDB