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 e7b7655..41218ac 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 6433fc9..aa45a85 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;
                }