Threaded IRQs
The main goal of threaded IRQs is to reduce the time spent with interrupts disabled to a bare minimum. With threaded IRQs, the way you register an interrupt handler is a bit simplified. You do not even have to schedule the bottom half yourself. The core does that for us. The bottom half is then executed in a dedicated kernel thread. We do not use request_irq()
anymore, but request_threaded_irq()
:
int request_threaded_irq(unsigned int irq, irq_handler_t handler,\ irq_handler_t thread_fn, \ unsigned long irqflags, \ const char *devname, void *dev_id)
The request_threaded_irq()
function accepts two functions in its parameters:
- @handler function: This is the same function as the one registered with
request_irq()
. It represents the top-half function, which runs in an atomic context (or hard-IRQ). If it can process the interrupt faster so that you can get rid of the bottom half at all, it should...