Hi Sebastian > Von: Sebastian Andrzej Siewior [mailto:bigeasy@xxxxxxxxxxxxx] > So this delay is caused by the softirq rework. I didn't think about this > but now that you show the trace it is obvious. > > If you use > request_threaded_irq(, NULL, vInterruptService, …); > > instead of > request_irq(, vInterruptService, …); > > then the IRQ will not be force threaded (but threaded on request) and > there will be no local_bh_disable() before the thread is invoked. So no > waiting until the AHCI thread is done. > > If vInterruptService() does nothing else than just wake up userland then > you could use swait_event_…() / swake_up_one() instead of the > wait_event_… / wake_up() combo. That would be allowed from the primary > handler and you could avoid the switch to the threaded-handler. thanks for the thorough analysis! I will try the request_threaded_irq(, NULL, vInterruptService, …) solution on Monday and report back. Since the driver also allows to poll several cards (which I don't use at the moment) I think it is not possible to switch to swait/swake... And the interrupt line may be shared and if I remember correctly in this case it is also not possible to use primary handlers, or am I wrong? Cheers, Martin