• Lai Jiangshan's avatar
    rcu classic: update qlen when cpu offline · 199a9528
    Lai Jiangshan authored
    When callbacks are moved from offline cpu to this cpu,
    the qlen field of this rdp should be updated.
    
    [ Paul E. McKenney: ]
    
    The effect of this bug would be for force_quiescent_state() to be invoked
    when it should not and vice versa -- wasting cycles in the first case
    and letting RCU callbacks remain piled up in the second case.  The bug
    is thus "benign" in that it does not result in premature grace-period
    termination, but should of course be fixed nonetheless.
    
    Preemption is disabled by the caller's get_cpu_var(), so we are guaranteed
    to remain on the same CPU, as required.  The local_irq_disable() is indeed
    needed, otherwise, an interrupt might invoke call_rcu() or call_rcu_bh(),
    which could cause that interrupt's increment of ->qlen to be lost.
    Signed-off-by: default avatarLai Jiangshan <laijs@cn.fujitsu.com>
    Cc: Andrew Morton <akpm@linux-foundation.org>
    Reviewed-by: default avatarPaul E. McKenney <paulmck@linux.vnet.ibm.com>
    Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
    199a9528
rcuclassic.c 17.2 KB