aboutsummaryrefslogtreecommitdiffstats
path: root/block/blk-ioc.c
diff options
context:
space:
mode:
authorViresh Kumar <viresh.kumar@linaro.org>2013-04-24 07:42:56 -0400
committerTejun Heo <tj@kernel.org>2013-05-14 13:50:07 -0400
commit695588f9454bdbc7c1a2fbb8a6bfdcfba6183348 (patch)
tree4a9963696a82937133acaa8ea682c88ff3d798af /block/blk-ioc.c
parentbbb47bdeae756f04b896b55b51f230f3eb21f207 (diff)
block: queue work on power efficient wq
Block layer uses workqueues for multiple purposes. There is no real dependency of scheduling these on the cpu which scheduled them. On a idle system, it is observed that and idle cpu wakes up many times just to service this work. It would be better if we can schedule it on a cpu which the scheduler believes to be the most appropriate one. This patch replaces normal workqueues with power efficient versions. Cc: Jens Axboe <axboe@kernel.dk> Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org> Signed-off-by: Tejun Heo <tj@kernel.org>
Diffstat (limited to 'block/blk-ioc.c')
-rw-r--r--block/blk-ioc.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/block/blk-ioc.c b/block/blk-ioc.c
index 9c4bb8266bc8..4464c823cff2 100644
--- a/block/blk-ioc.c
+++ b/block/blk-ioc.c
@@ -144,7 +144,8 @@ void put_io_context(struct io_context *ioc)
144 if (atomic_long_dec_and_test(&ioc->refcount)) { 144 if (atomic_long_dec_and_test(&ioc->refcount)) {
145 spin_lock_irqsave(&ioc->lock, flags); 145 spin_lock_irqsave(&ioc->lock, flags);
146 if (!hlist_empty(&ioc->icq_list)) 146 if (!hlist_empty(&ioc->icq_list))
147 schedule_work(&ioc->release_work); 147 queue_work(system_power_efficient_wq,
148 &ioc->release_work);
148 else 149 else
149 free_ioc = true; 150 free_ioc = true;
150 spin_unlock_irqrestore(&ioc->lock, flags); 151 spin_unlock_irqrestore(&ioc->lock, flags);