• Paul E. McKenney's avatar
    rcu: Make rcu_barrier() account for offline no-CBs CPUs · 127e2981
    Paul E. McKenney authored
    Currently, rcu_barrier() ignores offline CPUs,  However, it is possible
    for an offline no-CBs CPU to have callbacks queued, and rcu_barrier()
    must wait for those callbacks.  This commit therefore makes rcu_barrier()
    directly invoke the rcu_barrier_func() with interrupts disabled for such
    CPUs.  This requires passing the CPU number into this function so that
    it can entrain the rcu_barrier() callback onto the correct CPU's callback
    list, given that the code must instead execute on the current CPU.
    
    While in the area, this commit fixes a bug where the first CPU's callback
    might have been invoked before rcu_segcblist_entrain() returned, which
    would also result in an early wakeup.
    
    Fixes: 5d6742b3 ("rcu/nocb: Use rcu_segcblist for no-CBs CPUs")
    Signed-off-by: default avatarPaul E. McKenney <paulmck@kernel.org>
    [ paulmck: Apply optimization feedback from Boqun Feng. ]
    Cc: <stable@vger.kernel.org> # 5.5.x
    127e2981
rcu.h 22 KB