powerpc/kdump: Stop all other CPUs before running crash handlers
PATCH 1/1 powerpc/kdump: Stop all other CPUs before running crash handlers
During kdump we run the crash handlers first then stop all other CPUs. We really want to stop all CPUs as close to the fail as possible and also have a very controlled environment for running the crash handlers, so it makes sense to reverse the order.
Signed-off-by Anton Blanchard <[email protected]>
---
arch/powerpc/kernel/crash.c +13 -11
@@ -402,6 +402,18 @@ void default_machine_crash_shutdown(stru*/ hard_irq_disable (); +/* +* Make a note of crashing cpu. Will be used in machine_kexec +* such that another IPI will not be sent. +*/ + crashing_cpu =smp_processor_id (); +crash_save_cpu (regs, crashing_cpu); +crash_kexec_prepare_cpus (crashing_cpu); +cpu_set (crashing_cpu, cpus_in_crash); +#if defined(CONFIG_PPC_STD_MMU_64 ) && defined(CONFIG_SMP ) +crash_kexec_wait_realmode (crashing_cpu); +#endif +for_each_irq (i) {struct irq_desc *desc =irq_to_desc (i);
@@ -438,18 +450,8 @@ void default_machine_crash_shutdown(stru crash_shutdown_cpu =-1 ; __debugger_fault_handler = old_handler; -/* -* Make a note of crashing cpu. Will be used in machine_kexec -* such that another IPI will not be sent. -*/ - crashing_cpu =smp_processor_id (); -crash_save_cpu (regs, crashing_cpu); -crash_kexec_prepare_cpus (crashing_cpu); -cpu_set (crashing_cpu, cpus_in_crash);crash_kexec_stop_spus (); -#if defined(CONFIG_PPC_STD_MMU_64 ) && defined(CONFIG_SMP ) -crash_kexec_wait_realmode (crashing_cpu); -#endif +if (ppc_md.kexec_cpu_down) ppc_md.kexec_cpu_down (1 ,0 ); }
Quoted 6 lines · Anton Blanchard
During kdump we run the crash handlers first then stop all other CPUs. We really want to stop all CPUs as close to the fail as possible and also have a very controlled environment for running the crash handlers, so it makes sense to reverse the order.
Signed-off-by Anton Blanchard <[email protected]>
Looks like a sensible idea!
Acked-by Matt Evans <[email protected]>
Quoted 45 lines
---
Index:
powerpc.git/arch/powerpc/kernel/crash.c
===================================================================arch/powerpc/kernel/crash.c +13
-11@@ -402,6 +402,18 @@ void default_machine_crash_shutdown(stru*/ hard_irq_disable (); +/* +* Make a note of crashing cpu. Will be used in machine_kexec +* such that another IPI will not be sent. +*/ + crashing_cpu =smp_processor_id (); +crash_save_cpu (regs, crashing_cpu); +crash_kexec_prepare_cpus (crashing_cpu); +cpu_set (crashing_cpu, cpus_in_crash); +#if defined(CONFIG_PPC_STD_MMU_64 ) && defined(CONFIG_SMP ) +crash_kexec_wait_realmode (crashing_cpu); +#endif +for_each_irq (i) {struct irq_desc *desc =irq_to_desc (i);@@ -438,18 +450,8 @@ void default_machine_crash_shutdown(stru crash_shutdown_cpu =-1 ; __debugger_fault_handler = old_handler; -/* -* Make a note of crashing cpu. Will be used in machine_kexec -* such that another IPI will not be sent. -*/ - crashing_cpu =smp_processor_id (); -crash_save_cpu (regs, crashing_cpu); -crash_kexec_prepare_cpus (crashing_cpu); -cpu_set (crashing_cpu, cpus_in_crash);crash_kexec_stop_spus (); -#if defined(CONFIG_PPC_STD_MMU_64 ) && defined(CONFIG_SMP ) -crash_kexec_wait_realmode (crashing_cpu); -#endif +if (ppc_md.kexec_cpu_down) ppc_md.kexec_cpu_down (1 ,0 ); }