From: Hariprasad Nellitheertha This patch moves some crashdump related calls out of machine_kexec so that we leave the core kexec code untouched. Signed-off-by: Vivek Goyal Signed-off-by: Hariprasad Nellitheertha Signed-off-by: Andrew Morton --- 25-akpm/arch/i386/kernel/machine_kexec.c | 10 ---------- 25-akpm/kernel/crash.c | 9 +++++++++ 2 files changed, 9 insertions(+), 10 deletions(-) diff -puN arch/i386/kernel/machine_kexec.c~crashdump-cleanups-to-the-kexec-based-crashdump-code arch/i386/kernel/machine_kexec.c --- 25/arch/i386/kernel/machine_kexec.c~crashdump-cleanups-to-the-kexec-based-crashdump-code Wed Oct 20 16:22:25 2004 +++ 25-akpm/arch/i386/kernel/machine_kexec.c Wed Oct 20 16:22:25 2004 @@ -195,9 +195,6 @@ void machine_kexec(struct kimage *image) unsigned long reboot_code_buffer; relocate_new_kernel_t rnk; - crash_dump_stop_cpus(); - crash_dump_save_registers(); - /* Interrupts aren't acceptable while we reboot */ local_irq_disable(); @@ -208,13 +205,6 @@ void machine_kexec(struct kimage *image) /* Set up an identity mapping for the reboot_code_buffer */ identity_map_page(reboot_code_buffer); - /* - * If we are here to do a crash dump, save the memory from - * 0-640k before we copy over the kexec kernel image. Otherwise - * our dump will show the wrong kernel entirely. - */ - crash_relocate_mem(); - /* copy it out */ memcpy((void *)reboot_code_buffer, relocate_new_kernel, relocate_new_kernel_size); diff -puN kernel/crash.c~crashdump-cleanups-to-the-kexec-based-crashdump-code kernel/crash.c --- 25/kernel/crash.c~crashdump-cleanups-to-the-kexec-based-crashdump-code Wed Oct 20 16:22:25 2004 +++ 25-akpm/kernel/crash.c Wed Oct 20 16:22:25 2004 @@ -71,6 +71,15 @@ void __crash_machine_kexec(void) if (image) { crashed = 1; printk(KERN_EMERG "kexec: opening parachute\n"); + crash_dump_stop_cpus(); + crash_dump_save_registers(); + + /* If we are here to do a crash dump, save the memory from + * 0-640k before we copy over the kexec kernel image. Otherwise + * our dump will show the wrong kernel entirely. + */ + crash_relocate_mem(); + machine_kexec(image); } else { printk(KERN_EMERG "kexec: No kernel image loaded!\n"); _