On Mon, Feb 20, 2012 at 12:07:27PM +0000, Arnd Bergmann wrote: > Also, I would recommend using request_irq instead of request_threaded_irq > here because the function only has a single "complete()" call in it, > just like a threaded IRQ handler has. There is no point going through > another thread just to wake up the one that is blocked. Actually in this case that won't work as the interrupt is generated by the chip interrupt controller and as the chip is I2C/SPI controlled it is itself threaded and can only generate threaded interrupts as genirq can't get back into hard interrupt context. As a result of this restriction when an interrupt handler doesn't care what context it runs in it's better to use request_any_context_irq(). This will do a normal IRQ when it can but will bind successfully to a threaded IRQ if that's what's provided.