]> git.kernelconcepts.de Git - karo-tx-linux.git/blobdiff - arch/x86/kernel/apic/x2apic_uv_x.c
x86, nmi: Wire up NMI handlers to new routines
[karo-tx-linux.git] / arch / x86 / kernel / apic / x2apic_uv_x.c
index 34b18594e72467212f0e430c329e9fa523f3aa09..75be00ecfff2bac0b5651dfa92ae44de59850dae 100644 (file)
@@ -672,18 +672,11 @@ void __cpuinit uv_cpu_init(void)
 /*
  * When NMI is received, print a stack trace.
  */
-int uv_handle_nmi(struct notifier_block *self, unsigned long reason, void *data)
+int uv_handle_nmi(unsigned int reason, struct pt_regs *regs)
 {
        unsigned long real_uv_nmi;
        int bid;
 
-       if (reason != DIE_NMIUNKNOWN)
-               return NOTIFY_OK;
-
-       if (in_crash_kexec)
-               /* do nothing if entering the crash kernel */
-               return NOTIFY_OK;
-
        /*
         * Each blade has an MMR that indicates when an NMI has been sent
         * to cpus on the blade. If an NMI is detected, atomically
@@ -704,7 +697,7 @@ int uv_handle_nmi(struct notifier_block *self, unsigned long reason, void *data)
        }
 
        if (likely(__get_cpu_var(cpu_last_nmi_count) == uv_blade_info[bid].nmi_count))
-               return NOTIFY_DONE;
+               return NMI_DONE;
 
        __get_cpu_var(cpu_last_nmi_count) = uv_blade_info[bid].nmi_count;
 
@@ -717,17 +710,12 @@ int uv_handle_nmi(struct notifier_block *self, unsigned long reason, void *data)
        dump_stack();
        spin_unlock(&uv_nmi_lock);
 
-       return NOTIFY_STOP;
+       return NMI_HANDLED;
 }
 
-static struct notifier_block uv_dump_stack_nmi_nb = {
-       .notifier_call  = uv_handle_nmi,
-       .priority = NMI_LOCAL_LOW_PRIOR - 1,
-};
-
 void uv_register_nmi_notifier(void)
 {
-       if (register_die_notifier(&uv_dump_stack_nmi_nb))
+       if (register_nmi_handler(NMI_UNKNOWN, uv_handle_nmi, 0, "uv"))
                printk(KERN_WARNING "UV NMI handler failed to register\n");
 }