• P
    rcu: Add rcu_access_pointer and rcu_dereference_protected · b62730ba
    Paul E. McKenney 提交于
    This patch adds variants of rcu_dereference() that handle
    situations where the RCU-protected data structure cannot change,
    perhaps due to our holding the update-side lock, or where the
    RCU-protected pointer is only to be fetched, not dereferenced.
    These are needed due to some performance concerns with using
    rcu_dereference() where it is not required, aside from the need
    for lockdep/sparse checking.
    
    The new rcu_access_pointer() primitive is for the case where the
    pointer is be fetch and not dereferenced.  This primitive may be
    used without protection, RCU or otherwise, due to the fact that
    it uses ACCESS_ONCE().
    
    The new rcu_dereference_protected() primitive is for the case
    where updates are prevented, for example, due to holding the
    update-side lock.  This primitive does neither ACCESS_ONCE() nor
    smp_read_barrier_depends(), so can only be used when updates are
    somehow prevented.
    Suggested-by: NDavid Howells <dhowells@redhat.com>
    Signed-off-by: NPaul E. McKenney <paulmck@linux.vnet.ibm.com>
    Cc: laijs@cn.fujitsu.com
    Cc: dipankar@in.ibm.com
    Cc: mathieu.desnoyers@polymtl.ca
    Cc: josh@joshtriplett.org
    Cc: dvhltc@us.ibm.com
    Cc: niv@us.ibm.com
    Cc: peterz@infradead.org
    Cc: rostedt@goodmis.org
    Cc: Valdis.Kletnieks@vt.edu
    Cc: dhowells@redhat.com
    Cc: eric.dumazet@gmail.com
    LKML-Reference: <1270852752-25278-1-git-send-email-paulmck@linux.vnet.ibm.com>
    Signed-off-by: NIngo Molnar <mingo@elte.hu>
    b62730ba
rcupdate.h 15.8 KB