Feature #3318
Updated by Vadim Mutilin over 12 years ago
The function request_threaded_irq accepts two interrupt handlers # @handler (second parameter) - Regular interrupt handler # @thread_fn (third parameter) - Function called from the irq handler thread (has thread context, hence for example may use might_sleep functions) From comments: If you want to set up a threaded irq handler for your device then you need to supply @handler and @thread_fn. @handler is still called in hard interrupt context and has to check whether the interrupt originates from the device. If yes it needs to disable the interrupt on the device and return IRQ_WAKE_THREAD which will wake up the handler thread and run @thread_fn. This split handler design is necessary to support shared interrupts. <pre> extern int __must_check request_threaded_irq(unsigned int irq, irq_handler_t handler, irq_handler_t thread_fn, unsigned long flags, const char *name, void *dev); </pre> Driver environment generator should call * @handler with LDV_IN_INTERRUPT set (as usual) * @thread_fn *without* LDV_IN_INTERRUPT set now it calls call both with LDV_IN_INTERRUPT set