]> git.karo-electronics.de Git - mv-sheeva.git/commit
rcu: Eliminate softirq-mediated RCU_FAST_NO_HZ idle-entry loop
authorPaul E. McKenney <paul.mckenney@linaro.org>
Tue, 14 Feb 2012 18:12:54 +0000 (10:12 -0800)
committerPaul E. McKenney <paulmck@linux.vnet.ibm.com>
Tue, 21 Feb 2012 17:42:11 +0000 (09:42 -0800)
commitc3ce910b1456a45fa88959af3735bd6b285e54af
treed0e74991e637dddbeb3a8ab70ecd983325133893
parent8a2ecf474d3ee8dd5d001490349e422cec52f39f
rcu: Eliminate softirq-mediated RCU_FAST_NO_HZ idle-entry loop

If a softirq is pending, the current CPU has RCU callbacks pending,
and RCU does not immediately need anything from this CPU, then the
current code resets the RCU_FAST_NO_HZ state machine.  This means that
upon exit from the subsequent softirq handler, RCU_FAST_NO_HZ will
try really hard to force RCU into dyntick-idle mode.  And if the same
conditions hold after a few tries (determined by RCU_IDLE_OPT_FLUSHES),
the same situation can repeat, possibly endlessly.  This scenario is
not particularly good for battery lifetime.

This commit therefore suppresses the early exit from the RCU_FAST_NO_HZ
state machine in the case where there is a softirq pending.  This change
forces the state machine to retain its memory, and to enter holdoff if
this condition persists.

Reported-by: "Abou Gazala, Neven M" <neven.m.abou.gazala@intel.com>
Signed-off-by: Paul E. McKenney <paul.mckenney@linaro.org>
Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
kernel/rcutree_plugin.h