]> bbs.cooldavid.org Git - net-next-2.6.git/blobdiff - arch/x86/kernel/nmi.c
x86, NMI: fix watchdog failure message
[net-next-2.6.git] / arch / x86 / kernel / nmi.c
index 716b89284be02841cf74e81a73ad0d0a203cbfca..919473ad4a293e8bfccdc6a8eacb1dad39bc9622 100644 (file)
@@ -130,7 +130,7 @@ int __init check_nmi_watchdog(void)
 
 #ifdef CONFIG_SMP
        if (nmi_watchdog == NMI_LOCAL_APIC)
-               smp_call_function(nmi_cpu_busy, (void *)&endflag, 0, 0);
+               smp_call_function(nmi_cpu_busy, (void *)&endflag, 0);
 #endif
 
        for_each_possible_cpu(cpu)
@@ -142,11 +142,15 @@ int __init check_nmi_watchdog(void)
                if (!per_cpu(wd_enabled, cpu))
                        continue;
                if (get_nmi_count(cpu) - prev_nmi_count[cpu] <= 5) {
+                       printk("\n");
                        printk(KERN_WARNING "WARNING: CPU#%d: NMI "
                                "appears to be stuck (%d->%d)!\n",
                                cpu,
                                prev_nmi_count[cpu],
                                get_nmi_count(cpu));
+                       printk(KERN_WARNING "Please report this to "
+                              "linux-kernel@vger.kernel.org and attach "
+                              "the output of 'dmesg' command.\n");
                        per_cpu(wd_enabled, cpu) = 0;
                        atomic_dec(&nmi_active);
                }
@@ -263,7 +267,7 @@ late_initcall(init_lapic_nmi_sysfs);
 
 static void __acpi_nmi_enable(void *__unused)
 {
-       apic_write_around(APIC_LVT0, APIC_DM_NMI);
+       apic_write(APIC_LVT0, APIC_DM_NMI);
 }
 
 /*
@@ -272,12 +276,12 @@ static void __acpi_nmi_enable(void *__unused)
 void acpi_nmi_enable(void)
 {
        if (atomic_read(&nmi_active) && nmi_watchdog == NMI_IO_APIC)
-               on_each_cpu(__acpi_nmi_enable, NULL, 0, 1);
+               on_each_cpu(__acpi_nmi_enable, NULL, 1);
 }
 
 static void __acpi_nmi_disable(void *__unused)
 {
-       apic_write_around(APIC_LVT0, APIC_DM_NMI | APIC_LVT_MASKED);
+       apic_write(APIC_LVT0, APIC_DM_NMI | APIC_LVT_MASKED);
 }
 
 /*
@@ -286,7 +290,7 @@ static void __acpi_nmi_disable(void *__unused)
 void acpi_nmi_disable(void)
 {
        if (atomic_read(&nmi_active) && nmi_watchdog == NMI_IO_APIC)
-               on_each_cpu(__acpi_nmi_disable, NULL, 0, 1);
+               on_each_cpu(__acpi_nmi_disable, NULL, 1);
 }
 
 void setup_apic_nmi_watchdog(void *unused)
@@ -448,6 +452,13 @@ nmi_watchdog_tick(struct pt_regs *regs, unsigned reason)
 
 #ifdef CONFIG_SYSCTL
 
+static int __init setup_unknown_nmi_panic(char *str)
+{
+       unknown_nmi_panic = 1;
+       return 1;
+}
+__setup("unknown_nmi_panic", setup_unknown_nmi_panic);
+
 static int unknown_nmi_panic_callback(struct pt_regs *regs, int cpu)
 {
        unsigned char reason = get_nmi_reason();