rcu: Throttle invoke_rcu_core() invocations due to non-lazy callbacks
authorPaul E. McKenney <paulmck@linux.vnet.ibm.com>
Fri, 6 Sep 2013 00:02:11 +0000 (17:02 -0700)
committerPaul E. McKenney <paulmck@linux.vnet.ibm.com>
Wed, 25 Sep 2013 13:44:33 +0000 (06:44 -0700)
commitc337f8f58ed7cf150651d232af8222421a71463d
treed439faf0c005efc4e038477696dd15878efa5cb4
parentc229828ca6bc62d6c654f64b1d1b8a9ebd8a56f3
rcu: Throttle invoke_rcu_core() invocations due to non-lazy callbacks

If a non-lazy callback arrives on a CPU that has previously gone idle
with no non-lazy callbacks, invoke_rcu_core() forces the RCU core to
run.  However, it does not update the conditions, which could result
in several closely spaced invocations of the RCU core, which in turn
could result in an excessively high context-switch rate and resulting
high overhead.

This commit therefore updates the ->all_lazy and ->nonlazy_posted_snap
fields to prevent closely spaced invocations.

Reported-by: Tibor Billes <tbilles@gmx.com>
Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Tested-by: Tibor Billes <tbilles@gmx.com>
Reviewed-by: Josh Triplett <josh@joshtriplett.org>
kernel/rcutree_plugin.h