aboutsummaryrefslogtreecommitdiff
path: root/block
diff options
context:
space:
mode:
authorAnders Roxell <anders.roxell@linaro.org>2014-06-30 15:44:45 +0200
committerAnders Roxell <anders.roxell@linaro.org>2014-06-30 16:16:08 +0200
commit9e32061a8e77bf33d1d9955ca5acb3470935fd06 (patch)
tree1a6bc5cc8510a5233b7905ed9f13f2478a7f4109 /block
parent0cbd8a2041247e23ce09e99253c312027c76073e (diff)
Changes since v3.14.2-rt2
- rwsem readers are now not allowed to nest. A patch rom Steven Rostedt. - a few bugs were fixed in the hotplug code which were made during the v3.14 port. Fixed by Mike Galbraith. - Mike Galbraith sent a patch which might fix lazy preempt on x86_64. Patch applied and my machine still explodes therefore lazy preempt remains off on x86_64. - Mike Galbraith sent a few patches to get cpu hoplug to work. This includes lg_global_trylock_relax(). - A few push downs of migrate_disable() (where we call migrate_disable() after the rt_mutex_trylock()) have been reverted. It seems hotplug is not too happy about this. A patch by Steven Rostedt and and Mike Galbraith - There was a complaint about a backrace from run_local_timers() in UP mode because a spin_try_lock() failed. _This_ particular case was not an error. This optimization was for FULL_NO_HZ which is pointless on UP because there is no spare CPU. Therefore, this optimization is disabled in UP mode and the backtrace is gone. Reported by Stanislav Meduna. - block-mq notifier uses now a spinlock and runs during CPU_POST_DEAD instead at CPU_DEAD time. lockdep complained about the sleeping ctx->lock within the rawlock (blk_mq_cpu_notify_lock) and CPU_DEAD runs with irqs off. Known issues: - bcache is disabled. - lazy preempt on x86_64 leads to a crash with some load. - CPU hotplug works in general. Steven's test script however deadlocks usually on the second invocation. Signed-off-by: Anders Roxell <anders.roxell@linaro.org>
Diffstat (limited to 'block')
-rw-r--r--block/blk-mq.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/block/blk-mq.c b/block/blk-mq.c
index 25afbcc3a742..5fb26f785320 100644
--- a/block/blk-mq.c
+++ b/block/blk-mq.c
@@ -48,9 +48,14 @@ static struct blk_mq_ctx *blk_mq_get_ctx(struct request_queue *q)
return __blk_mq_get_ctx(q, get_cpu_light());
}
-static void blk_mq_put_ctx(struct blk_mq_ctx *ctx)
+static void __blk_mq_put_ctx(struct blk_mq_ctx *ctx)
{
spin_unlock(&ctx->cpu_lock);
+}
+
+static void blk_mq_put_ctx(struct blk_mq_ctx *ctx)
+{
+ __blk_mq_put_ctx(ctx);
put_cpu_light();
}
@@ -980,6 +985,7 @@ static void blk_mq_hctx_notify(void *data, unsigned long action,
clear_bit(ctx->index_hw, hctx->ctx_map);
}
spin_unlock(&ctx->lock);
+ __blk_mq_put_ctx(ctx);
if (list_empty(&tmp))
return;