|
@@ -29,10 +29,11 @@
|
|
|
|
|
|
#include <mach_ipi.h>
|
|
#include <mach_ipi.h>
|
|
|
|
|
|
|
|
+#if defined(CONFIG_SMP) && defined(CONFIG_X86_LOCAL_APIC)
|
|
|
|
+
|
|
/* This keeps a track of which one is crashing cpu. */
|
|
/* This keeps a track of which one is crashing cpu. */
|
|
static int crashing_cpu;
|
|
static int crashing_cpu;
|
|
|
|
|
|
-#if defined(CONFIG_SMP) && defined(CONFIG_X86_LOCAL_APIC)
|
|
|
|
static atomic_t waiting_for_crash_ipi;
|
|
static atomic_t waiting_for_crash_ipi;
|
|
|
|
|
|
static void kdump_nmi_callback(int cpu, struct die_args *args)
|
|
static void kdump_nmi_callback(int cpu, struct die_args *args)
|
|
@@ -100,6 +101,9 @@ static void nmi_shootdown_cpus(void)
|
|
{
|
|
{
|
|
unsigned long msecs;
|
|
unsigned long msecs;
|
|
|
|
|
|
|
|
+ /* Make a note of crashing cpu. Will be used in NMI callback.*/
|
|
|
|
+ crashing_cpu = safe_smp_processor_id();
|
|
|
|
+
|
|
atomic_set(&waiting_for_crash_ipi, num_online_cpus() - 1);
|
|
atomic_set(&waiting_for_crash_ipi, num_online_cpus() - 1);
|
|
/* Would it be better to replace the trap vector here? */
|
|
/* Would it be better to replace the trap vector here? */
|
|
if (register_die_notifier(&crash_nmi_nb))
|
|
if (register_die_notifier(&crash_nmi_nb))
|
|
@@ -140,8 +144,6 @@ void native_machine_crash_shutdown(struct pt_regs *regs)
|
|
/* The kernel is broken so disable interrupts */
|
|
/* The kernel is broken so disable interrupts */
|
|
local_irq_disable();
|
|
local_irq_disable();
|
|
|
|
|
|
- /* Make a note of crashing cpu. Will be used in NMI callback.*/
|
|
|
|
- crashing_cpu = safe_smp_processor_id();
|
|
|
|
nmi_shootdown_cpus();
|
|
nmi_shootdown_cpus();
|
|
lapic_shutdown();
|
|
lapic_shutdown();
|
|
#if defined(CONFIG_X86_IO_APIC)
|
|
#if defined(CONFIG_X86_IO_APIC)
|