• Paul E. McKenney's avatar
    rcu: Provide a get_completed_synchronize_rcu() function · 414c1238
    Paul E. McKenney authored
    It is currently up to the caller to handle stale return values from
    get_state_synchronize_rcu().  If poll_state_synchronize_rcu() returned
    true once, a grace period has elapsed, regardless of the fact that counter
    wrap might cause some future poll_state_synchronize_rcu() invocation to
    return false.  For example, the caller might store a separate flag that
    indicates whether some previous call to poll_state_synchronize_rcu()
    determined that the relevant grace period had already ended.
    
    This approach works, but it requires extra storage and is easy to get
    wrong.  This commit therefore introduces a get_completed_synchronize_rcu()
    that returns a cookie that causes poll_state_synchronize_rcu() to always
    return true.  This already-completed cookie can be stored in place of the
    cookie that previously caused poll_state_synchronize_rcu() to return true.
    It can also be used to flag a given structure as not having been exposed
    to readers, and thus not requiring a grace period to elapse.
    
    This commit is in preparation for polled expedited grace periods.
    
    Link: https://lore.kernel.org/all/20220121142454.1994916-1-bfoster@redhat.com/
    Link: https://docs.google.com/document/d/1RNKWW9jQyfjxw2E8dsXVTdvZYh0HnYeSHDKog9jhdN8/edit?usp=sharing
    Cc: Brian Foster <bfoster@redhat.com>
    Cc: Dave Chinner <david@fromorbit.com>
    Cc: Al Viro <viro@zeniv.linux.org.uk>
    Cc: Ian Kent <raven@themaw.net>
    Signed-off-by: default avatarPaul E. McKenney <paulmck@kernel.org>
    414c1238
rcu.h 17.8 KB