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);
How can we the IRQ handler thread calling thread_fn
again when it finishes, if there was another same IRQ generated and its hard IRQ handler calling handler
was executed and returned IRQ_WAKE_THREAD
?
In the above situation, IRQ_WAKE_THREAD
for same IRQ can be ignored. This is problematic when the same IRQ generation and the end of hard IRQ handler for it returns IRQ_WAKE_THREAD
during the IRQ handler thread is exiting. Then, the previous interrupt request will be ignored and cannot be processed by the handler until the same IRQ is generated again.