|
@@ -12,6 +12,7 @@
|
|
|
#include <linux/init.h>
|
|
|
#include <linux/numa.h>
|
|
|
#include <linux/ftrace.h>
|
|
|
+#include <linux/suspend.h>
|
|
|
|
|
|
#include <asm/pgtable.h>
|
|
|
#include <asm/pgalloc.h>
|
|
@@ -113,6 +114,7 @@ void machine_kexec(struct kimage *image)
|
|
|
{
|
|
|
unsigned long page_list[PAGES_NR];
|
|
|
void *control_page;
|
|
|
+ int save_ftrace_enabled;
|
|
|
asmlinkage unsigned long
|
|
|
(*relocate_kernel_ptr)(unsigned long indirection_page,
|
|
|
unsigned long control_page,
|
|
@@ -120,7 +122,12 @@ void machine_kexec(struct kimage *image)
|
|
|
unsigned int has_pae,
|
|
|
unsigned int preserve_context);
|
|
|
|
|
|
- tracer_disable();
|
|
|
+#ifdef CONFIG_KEXEC_JUMP
|
|
|
+ if (kexec_image->preserve_context)
|
|
|
+ save_processor_state();
|
|
|
+#endif
|
|
|
+
|
|
|
+ save_ftrace_enabled = __ftrace_enabled_save();
|
|
|
|
|
|
/* Interrupts aren't acceptable while we reboot */
|
|
|
local_irq_disable();
|
|
@@ -178,6 +185,13 @@ void machine_kexec(struct kimage *image)
|
|
|
(unsigned long)page_list,
|
|
|
image->start, cpu_has_pae,
|
|
|
image->preserve_context);
|
|
|
+
|
|
|
+#ifdef CONFIG_KEXEC_JUMP
|
|
|
+ if (kexec_image->preserve_context)
|
|
|
+ restore_processor_state();
|
|
|
+#endif
|
|
|
+
|
|
|
+ __ftrace_enabled_restore(save_ftrace_enabled);
|
|
|
}
|
|
|
|
|
|
void arch_crash_save_vmcoreinfo(void)
|