• Paul E. McKenney's avatar
    rcu: Avoid losing ->need_future_gp[] values due to GP start/end races · 51af970d
    Paul E. McKenney authored
    The rcu_cbs_completed() function provides the value of ->completed
    at which new callbacks can safely be invoked.  This is recorded in
    two-element ->need_future_gp[] arrays in the rcu_node structure, and
    the elements of these arrays corresponding to the just-completed grace
    period are zeroed at the end of that grace period.  However, the
    rcu_cbs_completed() function can return the current ->completed value
    plus either one or two, so it is possible for the corresponding
    ->need_future_gp[] entry to be cleared just after it was set, thus
    losing a request for a future grace period.
    
    This commit avoids this race by expanding ->need_future_gp[] to four
    elements.
    Signed-off-by: default avatarPaul E. McKenney <paulmck@linux.vnet.ibm.com>
    Tested-by: default avatarNicholas Piggin <npiggin@gmail.com>
    51af970d
tree.h 19.7 KB