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.

0

There are 0 best solutions below