Skip to content
  • Tejun Heo's avatar
    percpu-refcount: implement percpu_tryget() along with percpu_ref_kill_and_confirm() · dbece3a0
    Tejun Heo authored
    
    
    Implement percpu_tryget() which stops giving out references once the
    percpu_ref is visible as killed.  Because the refcnt is per-cpu,
    different CPUs will start to see a refcnt as killed at different
    points in time and tryget() may continue to succeed on subset of cpus
    for a while after percpu_ref_kill() returns.
    
    For use cases where it's necessary to know when all CPUs start to see
    the refcnt as dead, percpu_ref_kill_and_confirm() is added.  The new
    function takes an extra argument @confirm_kill which is invoked when
    the refcnt is guaranteed to be viewed as killed on all CPUs.
    
    While this isn't the prettiest interface, it doesn't force synchronous
    wait and is much safer than requiring the caller to do its own
    call_rcu().
    
    v2: Patch description rephrased to emphasize that tryget() may
        continue to succeed on some CPUs after kill() returns as suggested
        by Kent.
    
    v3: Function comment in percpu_ref_kill_and_confirm() updated warning
        people to not depend on the implied RCU grace period from the
        confirm callback as it's an implementation detail.
    
    Signed-off-by: default avatarTejun Heo <tj@kernel.org>
    Slightly-Grumpily-Acked-by: default avatarKent Overstreet <koverstreet@google.com>
    dbece3a0