x86: I/O APIC: keep IRQ off when changing LVT registers
authorMaciej W. Rozycki <macro@linux-mips.org>
Wed, 21 May 2008 21:09:34 +0000 (22:09 +0100)
committerIngo Molnar <mingo@elte.hu>
Tue, 8 Jul 2008 07:12:56 +0000 (09:12 +0200)
Disable the 8259A acting in the "virtual wire" mode to keep the interrupt
line inactive while fiddling with local APIC interrupt vector registers
associated with its destination inputs.  To be on the safe side,
especially concerning flipping the trigger mode.

Signed-off-by: Maciej W. Rozycki <macro@linux-mips.org>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
arch/x86/kernel/io_apic_32.c
arch/x86/kernel/io_apic_64.c

index e7b7655c4e946132a524654cd14ca983c8a06e5d..41218ac75d103bf45bfddfb19cddc700393b42f2 100644 (file)
@@ -2199,7 +2199,9 @@ static inline void __init check_timer(void)
                        else
                                add_pin_to_irq(0, apic2, pin2);
                        if (nmi_watchdog == NMI_IO_APIC) {
+                               disable_8259A_irq(0);
                                setup_nmi();
+                               enable_8259A_irq(0);
                        }
                        goto out;
                }
index 6433fc99f1f911531c023d2e2b4620520739ae1d..aa45a85c4d11392dcb0ce503ad503418c4f58e8e 100644 (file)
@@ -1702,7 +1702,9 @@ static inline void __init check_timer(void)
                        apic_printk(APIC_VERBOSE," works.\n");
                        nmi_watchdog_default();
                        if (nmi_watchdog == NMI_IO_APIC) {
+                               disable_8259A_irq(0);
                                setup_nmi();
+                               enable_8259A_irq(0);
                        }
                        goto out;
                }