Merge branch 'generic-ipi' into generic-ipi-for-linus
[linux-2.6-block.git] / arch / x86 / kernel / nmi.c
index 32acda25e3cb66bcd13a0cd834f0935f9c04fc8e..ec024b3baad0764821c036d0aa2552397f76f017 100644 (file)
@@ -119,10 +119,7 @@ int __init check_nmi_watchdog(void)
        unsigned int *prev_nmi_count;
        int cpu;
 
-       if (nmi_watchdog == NMI_NONE)
-               return 0;
-
-       if (!atomic_read(&nmi_active))
+       if (!nmi_watchdog_active() || !atomic_read(&nmi_active))
                return 0;
 
        prev_nmi_count = kmalloc(nr_cpu_ids * sizeof(int), GFP_KERNEL);
@@ -133,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)
@@ -174,6 +171,9 @@ int __init check_nmi_watchdog(void)
 error:
        if (nmi_watchdog == NMI_IO_APIC && !timer_through_8259)
                disable_8259A_irq(0);
+#ifdef CONFIG_X86_32
+       timer_ack = 0;
+#endif
        return -1;
 }
 
@@ -272,7 +272,7 @@ 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)
@@ -286,7 +286,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)
@@ -317,8 +317,7 @@ void setup_apic_nmi_watchdog(void *unused)
 void stop_apic_nmi_watchdog(void *unused)
 {
        /* only support LOCAL and IO APICs for now */
-       if (nmi_watchdog != NMI_LOCAL_APIC &&
-           nmi_watchdog != NMI_IO_APIC)
+       if (!nmi_watchdog_active())
                return;
        if (__get_cpu_var(wd_enabled) == 0)
                return;
@@ -348,8 +347,7 @@ static DEFINE_PER_CPU(int, nmi_touch);
 
 void touch_nmi_watchdog(void)
 {
-       if (nmi_watchdog == NMI_LOCAL_APIC ||
-               nmi_watchdog == NMI_IO_APIC) {
+       if (nmi_watchdog_active()) {
                unsigned cpu;
 
                /*
@@ -474,7 +472,7 @@ int proc_nmi_enabled(struct ctl_table *table, int write, struct file *file,
        if (!!old_state == !!nmi_watchdog_enabled)
                return 0;
 
-       if (atomic_read(&nmi_active) < 0 || nmi_watchdog == NMI_NONE) {
+       if (atomic_read(&nmi_active) < 0 || !nmi_watchdog_active()) {
                printk(KERN_WARNING
                        "NMI watchdog is permanently disabled\n");
                return -EIO;