forked from rrcarlosr/Jetpack
58 lines
1.6 KiB
Diff
58 lines
1.6 KiB
Diff
From 058fe8b766b1dada7fac9df0c687828aa1b6db1e Mon Sep 17 00:00:00 2001
|
|
From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
|
|
Date: Tue, 14 Jul 2015 14:26:34 +0200
|
|
Subject: [PATCH 214/352] block/mq: do not invoke preempt_disable()
|
|
|
|
preempt_disable() and get_cpu() don't play well together with the sleeping
|
|
locks it tries to allocate later.
|
|
It seems to be enough to replace it with get_cpu_light() and migrate_disable().
|
|
|
|
Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
|
|
---
|
|
block/blk-mq.c | 10 +++++-----
|
|
1 file changed, 5 insertions(+), 5 deletions(-)
|
|
|
|
diff --git a/block/blk-mq.c b/block/blk-mq.c
|
|
index d9c9b4d..29a25ab 100644
|
|
--- a/block/blk-mq.c
|
|
+++ b/block/blk-mq.c
|
|
@@ -370,7 +370,7 @@ static void blk_mq_ipi_complete_request(struct request *rq)
|
|
return;
|
|
}
|
|
|
|
- cpu = get_cpu();
|
|
+ cpu = get_cpu_light();
|
|
if (!test_bit(QUEUE_FLAG_SAME_FORCE, &rq->q->queue_flags))
|
|
shared = cpus_share_cache(cpu, ctx->cpu);
|
|
|
|
@@ -382,7 +382,7 @@ static void blk_mq_ipi_complete_request(struct request *rq)
|
|
} else {
|
|
rq->q->softirq_done_fn(rq);
|
|
}
|
|
- put_cpu();
|
|
+ put_cpu_light();
|
|
}
|
|
|
|
static void __blk_mq_complete_request(struct request *rq)
|
|
@@ -913,14 +913,14 @@ void blk_mq_run_hw_queue(struct blk_mq_hw_ctx *hctx, bool async)
|
|
return;
|
|
|
|
if (!async && !(hctx->flags & BLK_MQ_F_BLOCKING)) {
|
|
- int cpu = get_cpu();
|
|
+ int cpu = get_cpu_light();
|
|
if (cpumask_test_cpu(cpu, hctx->cpumask)) {
|
|
__blk_mq_run_hw_queue(hctx);
|
|
- put_cpu();
|
|
+ put_cpu_light();
|
|
return;
|
|
}
|
|
|
|
- put_cpu();
|
|
+ put_cpu_light();
|
|
}
|
|
|
|
kblockd_schedule_work_on(blk_mq_hctx_next_cpu(hctx), &hctx->run_work);
|
|
--
|
|
2.7.4
|
|
|