kexec jump: fix for ftrace
Subsystems (4)
PATCH 7/7 kexec jump: fix for ftrace
Ftrace depends on some processor state that we destroyed during kexec and restored by restore_processor_state(). So save_processor_state() and restore_processor_state() are moved into machine_kexec() and ftrace is restored after restore_processor_state().
Signed-off-by Huang Ying <[email protected]>
--- arch/x86/kernel/machine_kexec_32.c | 16 +++++++++++++++- kernel/kexec.c | 2 -- 2 files changed, 15 insertions(+), 3 deletions(-)
arch/x86/kernel/machine_kexec_32.c +15 -1
@@ -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 )
kernel/kexec.c +0 -2
@@ -1469,7 +1469,6 @@ int kernel_kexec(void) error =device_power_down (PMSG_FREEZE );if (error) goto Enable_irqs; -save_processor_state (); } else#endif {
@@ -1482,7 +1481,6 @@ int kernel_kexec(void)#ifdef CONFIG_KEXEC_JUMP if (kexec_image->preserve_context) { -restore_processor_state ();device_power_up (PMSG_RESTORE ); Enable_irqs:local_irq_enable ();
_______________________________________________
kexec mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/kexec