diff options
author | viresh kumar <viresh.kumar@linaro.org> | 2014-01-22 12:23:33 +0530 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2014-01-22 21:57:05 -0800 |
commit | f618002b0b598036ebb8feceb44ea8e05f4cd37b (patch) | |
tree | 0273785b7340ba3490ae27afae6f8dc320fa2070 /net/core | |
parent | 906e073f3e842877b59d669b25aa76f65ba775b3 (diff) | |
download | op-kernel-dev-f618002b0b598036ebb8feceb44ea8e05f4cd37b.zip op-kernel-dev-f618002b0b598036ebb8feceb44ea8e05f4cd37b.tar.gz |
net/neighbour: queue work on power efficient wq
Workqueue used in neighbour layer have no real dependency of scheduling these on
the cpu which scheduled them.
On a idle system, it is observed that an 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. This
doesn't change existing behavior of code unless CONFIG_WQ_POWER_EFFICIENT is
enabled.
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/core')
-rw-r--r-- | net/core/neighbour.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/net/core/neighbour.c b/net/core/neighbour.c index f8012fe..b9e9e0d 100644 --- a/net/core/neighbour.c +++ b/net/core/neighbour.c @@ -828,7 +828,7 @@ out: * ARP entry timeouts range from 1/2 BASE_REACHABLE_TIME to 3/2 * BASE_REACHABLE_TIME. */ - schedule_delayed_work(&tbl->gc_work, + queue_delayed_work(system_power_efficient_wq, &tbl->gc_work, NEIGH_VAR(&tbl->parms, BASE_REACHABLE_TIME) >> 1); write_unlock_bh(&tbl->lock); } @@ -1565,7 +1565,8 @@ static void neigh_table_init_no_netlink(struct neigh_table *tbl) rwlock_init(&tbl->lock); INIT_DEFERRABLE_WORK(&tbl->gc_work, neigh_periodic_work); - schedule_delayed_work(&tbl->gc_work, tbl->parms.reachable_time); + queue_delayed_work(system_power_efficient_wq, &tbl->gc_work, + tbl->parms.reachable_time); setup_timer(&tbl->proxy_timer, neigh_proxy_process, (unsigned long)tbl); skb_queue_head_init_class(&tbl->proxy_queue, &neigh_table_proxy_queue_class); |