[PATCH] powerpc: Fix some MPIC + HT APIC buglets
authorSegher Boessenkool <segher@kernel.crashing.org>
Fri, 17 Feb 2006 10:25:42 +0000 (11:25 +0100)
committerPaul Mackerras <paulus@samba.org>
Fri, 24 Feb 2006 00:36:37 +0000 (11:36 +1100)
Do disable, not enable, the HT APIC IRQ in the function that is
supposed to.
Enable the MPIC IRQ before enabling the downstream APIC IRQ, avoids
potentially losing an interrupt.

Signed-off-by: Segher Boessenkool <segher@kernel.crashing.org>
Acked-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Signed-off-by: Paul Mackerras <paulus@samba.org>
arch/powerpc/sysdev/mpic.c

index 4f26304..7dcdfcb 100644 (file)
@@ -234,7 +234,7 @@ static void mpic_shutdown_ht_interrupt(struct mpic *mpic, unsigned int source,
        spin_lock_irqsave(&mpic->fixup_lock, flags);
        writeb(0x10 + 2 * fixup->index, fixup->base + 2);
        tmp = readl(fixup->base + 4);
-       tmp &= ~1U;
+       tmp |= 1;
        writel(tmp, fixup->base + 4);
        spin_unlock_irqrestore(&mpic->fixup_lock, flags);
 }
@@ -446,14 +446,15 @@ static unsigned int mpic_startup_irq(unsigned int irq)
 #ifdef CONFIG_MPIC_BROKEN_U3
        struct mpic *mpic = mpic_from_irq(irq);
        unsigned int src = irq - mpic->irq_offset;
+#endif /* CONFIG_MPIC_BROKEN_U3 */
+
+       mpic_enable_irq(irq);
 
+#ifdef CONFIG_MPIC_BROKEN_U3
        if (mpic_is_ht_interrupt(mpic, src))
                mpic_startup_ht_interrupt(mpic, src, irq_desc[irq].status);
-
 #endif /* CONFIG_MPIC_BROKEN_U3 */
 
-       mpic_enable_irq(irq);
-
        return 0;
 }