rcu: Keep invoking callbacks if CPU otherwise idle
authorPaul E. McKenney <paul.mckenney@linaro.org>
Tue, 29 Nov 2011 23:57:13 +0000 (15:57 -0800)
committerPaul E. McKenney <paulmck@linux.vnet.ibm.com>
Sun, 11 Dec 2011 18:32:09 +0000 (10:32 -0800)
commitdff1672d9199fffddb58fa7970ccf59005fc35f3
treea9740f65dfc203d183cb06ce0faeed0de5cef58b
parentfacc4e159672b4ed10aa18147bfa187b013c9505
rcu: Keep invoking callbacks if CPU otherwise idle

The rcu_do_batch() function that invokes callbacks for TREE_RCU and
TREE_PREEMPT_RCU normally throttles callback invocation to avoid degrading
scheduling latency.  However, as long as the CPU would otherwise be idle,
there is no downside to continuing to invoke any callbacks that have passed
through their grace periods.  In fact, processing such callbacks in a
timely manner has the benefit of increasing the probability that the
CPU can enter the power-saving dyntick-idle mode.

Therefore, this commit allows callback invocation to continue beyond the
preset limit as long as the scheduler does not have some other task to
run and as long as context is that of the idle task or the relevant
RCU kthread.

Signed-off-by: Paul E. McKenney <paul.mckenney@linaro.org>
Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
kernel/rcutree.c
kernel/rcutree.h
kernel/rcutree_plugin.h