| From: Sebastian Andrzej Siewior <bigeasy@linutronix.de> |
| Date: Wed, 28 Oct 2020 11:07:09 +0100 |
| Subject: [PATCH 2/3] 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. |
| |
| Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> |
| --- |
| block/blk-mq.c | 14 +------------- |
| 1 file changed, 1 insertion(+), 13 deletions(-) |
| |
| --- a/block/blk-mq.c |
| +++ b/block/blk-mq.c |
| @@ -626,19 +626,7 @@ static void __blk_mq_complete_request_re |
| { |
| 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) |