That handler lacks the minimal checks for action being zero etc. Keep the weird flow - ack before handling - intact and call into handle_simple_irq which does the right thing. Signed-off-by: Thomas Gleixner Cc: Peter Zijlstra Acked-by: Greg Ungerer LKML-Reference: <20110202212552.413849952@linutronix.de> --- arch/m68knommu/platform/5272/intc.c | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) Index: linux-2.6-tip/arch/m68knommu/platform/5272/intc.c =================================================================== --- linux-2.6-tip.orig/arch/m68knommu/platform/5272/intc.c +++ linux-2.6-tip/arch/m68knommu/platform/5272/intc.c @@ -137,11 +137,8 @@ static int intc_irq_set_type(unsigned in */ static void intc_external_irq(unsigned int irq, struct irq_desc *desc) { - kstat_incr_irqs_this_cpu(irq, desc); - desc->status |= IRQ_INPROGRESS; - desc->chip->ack(irq); - handle_IRQ_event(irq, desc->action); - desc->status &= ~IRQ_INPROGRESS; + get_irq_desc_chip(desc)->irq_ack(irq); + handle_simple_irq(irq, desc); } static struct irq_chip intc_irq_chip = {