rcu: Avoid waking up CPUs having only kfree_rcu() callbacks
authorPaul E. McKenney <paul.mckenney@linaro.org>
Fri, 6 Jan 2012 22:11:30 +0000 (14:11 -0800)
committerPaul E. McKenney <paulmck@linux.vnet.ibm.com>
Tue, 21 Feb 2012 17:03:25 +0000 (09:03 -0800)
commit486e259340fc4c60474f2c14703e3b3634bb58ca
tree70a58702194588fa0773463523f72c682785d040
parent0bb7b59d6e2b8440cd7097097dd4bbfc4d76ed07
rcu: Avoid waking up CPUs having only kfree_rcu() callbacks

When CONFIG_RCU_FAST_NO_HZ is enabled, RCU will allow a given CPU to
enter dyntick-idle mode even if it still has RCU callbacks queued.
RCU avoids system hangs in this case by scheduling a timer for several
jiffies in the future.  However, if all of the callbacks on that CPU
are from kfree_rcu(), there is no reason to wake the CPU up, as it is
not a problem to defer freeing of memory.

This commit therefore tracks the number of callbacks on a given CPU
that are from kfree_rcu(), and avoids scheduling the timer if all of
a given CPU's callbacks are from kfree_rcu().

Signed-off-by: Paul E. McKenney <paul.mckenney@linaro.org>
Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
include/linux/rcupdate.h
include/linux/rcutiny.h
include/linux/rcutree.h
include/trace/events/rcu.h
kernel/rcu.h
kernel/rcutiny.c
kernel/rcutree.c
kernel/rcutree.h
kernel/rcutree_plugin.h
kernel/rcutree_trace.c