From: Philipp Zabel Wrong irq numbers were given to desc->handle_irq, which on some devices caused endless loops (asic3_irq_demux calling itself, basically). Signed-off-by: Philipp Zabel Cc: Samuel Ortiz Signed-off-by: Andrew Morton --- drivers/mfd/asic3.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff -puN drivers/mfd/asic3.c~mfd-fix-a-bug-in-the-asic3-irq-demux-code drivers/mfd/asic3.c --- a/drivers/mfd/asic3.c~mfd-fix-a-bug-in-the-asic3-irq-demux-code +++ a/drivers/mfd/asic3.c @@ -137,7 +137,7 @@ static void asic3_irq_demux(unsigned int for (i = ASIC3_NUM_GPIOS; i < ASIC3_NR_IRQS; i++) { /* They start at bit 4 and go up */ if (status & (1 << (i - ASIC3_NUM_GPIOS + 4))) { - desc = irq_desc + + i; + desc = irq_desc + asic->irq_base + i; desc->handle_irq(asic->irq_base + i, desc); } _