• P
    rcu: Eliminate softirq-mediated RCU_FAST_NO_HZ idle-entry loop · c3ce910b
    Paul E. McKenney 提交于
    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: N"Abou Gazala, Neven M" <neven.m.abou.gazala@intel.com>
    Signed-off-by: NPaul E. McKenney <paul.mckenney@linaro.org>
    Signed-off-by: NPaul E. McKenney <paulmck@linux.vnet.ibm.com>
    c3ce910b
rcutree_plugin.h 66.9 KB