The main goal of threaded IRQs is reducing 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 does 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...