On Tue, Mar 12, 2019 at 6:32 PM Rizvi, Mohammad Faiz Abbas <faiz_abbas@xxxxxx> wrote: > On 3/8/2019 7:06 PM, Adrian Hunter wrote: > > On 6/03/19 12:00 PM, Faiz Abbas wrote: > > It is a performance drop that can be avoided, so it might as well be. > > Splitting the success path from the failure path is common for I/O drivers > > for similar reasons as here: the success path can be optimized whereas the > > failure path potentially needs to sleep. > > Understood. You wanna keep the success path as fast as possible. I looked at the sdhci_request_done() function and found that almost all of it is executed inside of a 'spin_lock_irqsave()', including the potentially expensive dma_sync_single_for_cpu() calls. This means there is very little benefit in using the tasklet in the first place, it could just as well run in the hwirq context that triggered it. The part that is actually run with interrupts enabled in the tasklet is mmc_blk_cqe_req_done(), but other drivers also call this from IRQ context. Arnd