mirror of
https://github.com/tbsdtv/linux_media.git
synced 2025-07-23 12:43:29 +02:00
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>
This commit is contained in:
committed by
Jens Axboe
parent
93e4f73a93
commit
0a2efafbb1
@@ -628,19 +628,7 @@ static void __blk_mq_complete_request_remote(void *data)
|
|||||||
{
|
{
|
||||||
struct request *rq = data;
|
struct request *rq = data;
|
||||||
|
|
||||||
/*
|
blk_mq_trigger_softirq(rq);
|
||||||
* 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);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline bool blk_mq_complete_need_ipi(struct request *rq)
|
static inline bool blk_mq_complete_need_ipi(struct request *rq)
|
||||||
|
Reference in New Issue
Block a user