• Frederic Weisbecker's avatar
    rcu: Stop chasing QS if another CPU did it for us · 20377f32
    Frederic Weisbecker authored
    When a CPU is idle and others CPUs handled its extended
    quiescent state to complete grace periods on its behalf,
    it will catch up with completed grace periods numbers
    when it wakes up.
    
    But at this point there might be no more grace period to
    complete, but still the woken CPU always keeps its stale
    qs_pending value and will then continue to chase quiescent
    states even if its not needed anymore.
    
    This results in clusters of spurious softirqs until a new
    real grace period is started. Because if we continue to
    chase quiescent states but we have completed every grace
    periods, rcu_report_qs_rdp() is puzzled and makes that
    state run into infinite loops.
    
    As suggested by Lai Jiangshan, just reset qs_pending if
    someone completed every grace periods on our behalf.
    Suggested-by: default avatarLai Jiangshan <laijs@cn.fujitsu.com>
    Signed-off-by: default avatarFrederic Weisbecker <fweisbec@gmail.com>
    Cc: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
    Cc: Ingo Molnar <mingo@elte.hu>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
    Cc: Steven Rostedt <rostedt@goodmis.org>
    Signed-off-by: default avatarPaul E. McKenney <paulmck@linux.vnet.ibm.com>
    20377f32
rcutree.c 56.9 KB