aboutsummaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
Diffstat (limited to 'arch')
-rw-r--r--arch/x86/Kconfig5
-rw-r--r--arch/x86/kernel/machine_kexec_32.c12
2 files changed, 15 insertions, 2 deletions
diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
index 7ecb679f0130..6b2debfabddc 100644
--- a/arch/x86/Kconfig
+++ b/arch/x86/Kconfig
@@ -1282,9 +1282,10 @@ config CRASH_DUMP
1282config KEXEC_JUMP 1282config KEXEC_JUMP
1283 bool "kexec jump (EXPERIMENTAL)" 1283 bool "kexec jump (EXPERIMENTAL)"
1284 depends on EXPERIMENTAL 1284 depends on EXPERIMENTAL
1285 depends on KEXEC && PM_SLEEP && X86_32 1285 depends on KEXEC && HIBERNATION && X86_32
1286 help 1286 help
1287 Invoke code in physical address mode via KEXEC 1287 Jump between original kernel and kexeced kernel and invoke
1288 code in physical address mode via KEXEC
1288 1289
1289config PHYSICAL_START 1290config PHYSICAL_START
1290 hex "Physical address where the kernel is loaded" if (EMBEDDED || CRASH_DUMP) 1291 hex "Physical address where the kernel is loaded" if (EMBEDDED || CRASH_DUMP)
diff --git a/arch/x86/kernel/machine_kexec_32.c b/arch/x86/kernel/machine_kexec_32.c
index 2b67609d0a1c..9fe478d98406 100644
--- a/arch/x86/kernel/machine_kexec_32.c
+++ b/arch/x86/kernel/machine_kexec_32.c
@@ -125,6 +125,18 @@ void machine_kexec(struct kimage *image)
125 /* Interrupts aren't acceptable while we reboot */ 125 /* Interrupts aren't acceptable while we reboot */
126 local_irq_disable(); 126 local_irq_disable();
127 127
128 if (image->preserve_context) {
129#ifdef CONFIG_X86_IO_APIC
130 /* We need to put APICs in legacy mode so that we can
131 * get timer interrupts in second kernel. kexec/kdump
132 * paths already have calls to disable_IO_APIC() in
133 * one form or other. kexec jump path also need
134 * one.
135 */
136 disable_IO_APIC();
137#endif
138 }
139
128 control_page = page_address(image->control_code_page); 140 control_page = page_address(image->control_code_page);
129 memcpy(control_page, relocate_kernel, PAGE_SIZE/2); 141 memcpy(control_page, relocate_kernel, PAGE_SIZE/2);
130 142