diff options
author | Viresh Kumar <viresh.kumar@linaro.org> | 2013-04-24 07:42:56 -0400 |
---|---|---|
committer | Tejun Heo <tj@kernel.org> | 2013-05-14 13:50:07 -0400 |
commit | 695588f9454bdbc7c1a2fbb8a6bfdcfba6183348 (patch) | |
tree | 4a9963696a82937133acaa8ea682c88ff3d798af /block/blk-ioc.c | |
parent | bbb47bdeae756f04b896b55b51f230f3eb21f207 (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.c | 3 |
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); |