@@ -325,15 +325,12 @@ static void sun4u_set_affinity(unsigned int virt_irq,
static void sun4u_irq_disable(unsigned int virt_irq)
{
- struct irq_handler_data *data = get_irq_chip_data(virt_irq);
-
- if (likely(data)) {
- unsigned long imap = data->imap;
- unsigned long tmp = upa_readq(imap);
-
- tmp &= ~IMAP_VALID;
- upa_writeq(tmp, imap);
- }
+ /* Don't do anything. The desc->status check for
+ * IRQ_DISABLED in handler_irq() will skip the
+ * handler call and that will leave the interrupt
+ * in the sent state. The next ->enable() call will
+ * hit the ICLR register to reset the state machine.
+ */
}
static void sun4u_irq_eoi(unsigned int virt_irq)
@@ -746,7 +743,8 @@ void handler_irq(int irq, struct pt_regs *regs)
desc = irq_desc + virt_irq;
- desc->handle_irq(virt_irq, desc);
+ if (!(desc->status & IRQ_DISABLED))
+ desc->handle_irq(virt_irq, desc);
bucket_pa = next_pa;
}