This a repost of the patches in the old thread [0] which died, rebase against -next. The series avoids completing the requests on a remote CPU if booted with threadirqs. It avoids completing requests in hard-IRQ context on remote CPU by deferring it to the the softirq context. One change since the last post: preempt-disable() around llist_add() + raise_softirq() to ensure that request is added on the same CPU where the softirq is raised. Some callers (like usb-storage) invoke this function from preemtible context and this preserves the current "call me from any context" semantic. My understanding is that in a later attempt we may change such callers to complete directly and avoid the softirq ping-pong. [0] https://lkml.kernel.org/r/20201028141251.3608598-1-bigeasy@xxxxxxxxxxxxx Sebastian