• P
    rcu: Fix rcu_barrier() race that could result in too-short wait · 41050a00
    Paul E. McKenney 提交于
    The rcu_barrier() no-callbacks check for no-CBs CPUs has race conditions.
    It checks a given CPU's lists of callbacks, and if all three no-CBs lists
    are empty, ignores that CPU.  However, these three lists could potentially
    be empty even when callbacks are present if the check executed just as
    the callbacks were being moved from one list to another.  It turns out
    that recent versions of rcutorture can spot this race.
    
    This commit plugs this hole by consolidating the per-list counts of
    no-CBs callbacks into a single count, which is incremented before
    the corresponding callback is posted and after it is invoked.  Then
    rcu_barrier() checks this single count to reliably determine whether
    the corresponding CPU has no-CBs callbacks.
    Signed-off-by: NPaul E. McKenney <paulmck@linux.vnet.ibm.com>
    41050a00
tree.c 117.8 KB