summaryrefslogtreecommitdiffstats
path: root/debian/patches-rt/0064-blk-mq-Always-complete-remote-completions-requests-i.patch
diff options
context:
space:
mode:
Diffstat (limited to 'debian/patches-rt/0064-blk-mq-Always-complete-remote-completions-requests-i.patch')
-rw-r--r--debian/patches-rt/0064-blk-mq-Always-complete-remote-completions-requests-i.patch49
1 files changed, 49 insertions, 0 deletions
diff --git a/debian/patches-rt/0064-blk-mq-Always-complete-remote-completions-requests-i.patch b/debian/patches-rt/0064-blk-mq-Always-complete-remote-completions-requests-i.patch
new file mode 100644
index 000000000..92574e87b
--- /dev/null
+++ b/debian/patches-rt/0064-blk-mq-Always-complete-remote-completions-requests-i.patch
@@ -0,0 +1,49 @@
+From 4397e4a75ac6456a0dd8cf0a99c8250845b022d6 Mon Sep 17 00:00:00 2001
+From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+Date: Sat, 23 Jan 2021 21:10:26 +0100
+Subject: [PATCH 064/323] blk-mq: Always complete remote completions requests
+ in softirq
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/5.10/older/patches-5.10.204-rt100.tar.xz
+
+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>
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ block/blk-mq.c | 14 +-------------
+ 1 file changed, 1 insertion(+), 13 deletions(-)
+
+diff --git a/block/blk-mq.c b/block/blk-mq.c
+index cc41373cf346..87b8377a74fc 100644
+--- a/block/blk-mq.c
++++ b/block/blk-mq.c
+@@ -630,19 +630,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)
+--
+2.43.0
+