diff options
author | Sebastian Andrzej Siewior <bigeasy@linutronix.de> | 2021-01-23 21:10:26 +0100 |
---|---|---|
committer | Jens Axboe <axboe@kernel.dk> | 2021-02-12 08:28:02 -0700 |
commit | 0a2efafbb1c752a7041652445bc1232114409633 (patch) | |
tree | 1c974ca682d57393222530d26d0a7094da8725a3 /block | |
parent | 93e4f73a93717993bd239e6606689e9ae01c6926 (diff) | |
download | linux-stable-0a2efafbb1c752a7041652445bc1232114409633.tar.gz linux-stable-0a2efafbb1c752a7041652445bc1232114409633.tar.bz2 linux-stable-0a2efafbb1c752a7041652445bc1232114409633.zip |
blk-mq: Always complete remote completions requests in softirq
Controllers with multiple queues have their IRQ-handelers pinned to a
CPU. The core shouldn't need to complete the request on a remote CPU.
Remove this case and always raise the softirq to complete the request.
Reviewed-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Daniel Wagner <dwagner@suse.de>
Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Diffstat (limited to 'block')
-rw-r--r-- | block/blk-mq.c | 14 |
1 files changed, 1 insertions, 13 deletions
diff --git a/block/blk-mq.c b/block/blk-mq.c index f285a9123a8b..90348ae51846 100644 --- a/block/blk-mq.c +++ b/block/blk-mq.c @@ -628,19 +628,7 @@ static void __blk_mq_complete_request_remote(void *data) { struct request *rq = data; - /* - * For most of single queue controllers, there is only one irq vector - * for handling I/O completion, and the only irq's affinity is set - * to all possible CPUs. On most of ARCHs, this affinity means the irq - * is handled on one specific CPU. - * - * So complete I/O requests in softirq context in case of single queue - * devices to avoid degrading I/O performance due to irqsoff latency. - */ - if (rq->q->nr_hw_queues == 1) - blk_mq_trigger_softirq(rq); - else - rq->q->mq_ops->complete(rq); + blk_mq_trigger_softirq(rq); } static inline bool blk_mq_complete_need_ipi(struct request *rq) |