On Mon, Jan 25, 2021 at 09:30:29AM +0100, Sebastian Andrzej Siewior wrote: > On 2021-01-25 08:25:42 [+0000], Christoph Hellwig wrote: > > On Mon, Jan 25, 2021 at 08:10:16AM +0100, Hannes Reinecke wrote: > > > I don't get this. > > > This code is about _avoiding_ having to raise a softirq if the driver > > > exports more than one hardware queue. > > > So where exactly does the remote CPU case come in here? > > > > __blk_mq_complete_request_remote is only called for the case where we > > do not completelky locally. The case that "degrades" here is where > > the device supports multiple queues, but less than the number of CPUs, > > and we bounce the completion to another CPU. > > Does it really "degrade" or just use the softirq more often? The usual > case is run the softirqs in irq_exit() which is just after IPI. Well, I put it in quotes because I'm not sure what the exact effect is. But we do delay these completions to the softirq now instead of hardirq context, which at least in theory increases latency. OTOH it might even have positive effects on the rest of the system.