From: Sebastian Andrzej Siewior Date: Thu, 29 Jan 2015 15:10:08 +0100 Subject: block/mq: don't complete requests via IPI Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/5.4/older/patches-5.4.3-rt1.tar.xz The IPI runs in hardirq context and there are sleeping locks. Assume caches are shared and complete them on the local CPU. Signed-off-by: Sebastian Andrzej Siewior --- block/blk-mq.c | 8 ++++++++ 1 file changed, 8 insertions(+) --- a/block/blk-mq.c +++ b/block/blk-mq.c @@ -612,8 +612,16 @@ static void __blk_mq_complete_request(st } cpu = get_cpu_light(); + /* + * Avoid SMP function calls for completions because they acquire + * sleeping spinlocks on RT. + */ +#ifdef CONFIG_PREEMPT_RT + shared = true; +#else if (!test_bit(QUEUE_FLAG_SAME_FORCE, &q->queue_flags)) shared = cpus_share_cache(cpu, ctx->cpu); +#endif if (cpu != ctx->cpu && !shared && cpu_online(ctx->cpu)) { rq->csd.func = __blk_mq_complete_request_remote;