Message ID | 1286182812.18293.22.camel@edumazet-laptop |
---|---|
State | Accepted, archived |
Delegated to: | David Miller |
Headers | show |
From: Eric Dumazet <eric.dumazet@gmail.com> Date: Mon, 04 Oct 2010 11:00:12 +0200 > Le lundi 04 octobre 2010 à 10:42 +0200, Eric Dumazet a écrit : > >> BTW, rtnl_dereference() should be changed to use >> rcu_dereference_protected() instead of rcu_dereference_check() : >> If RTBL is held, there is no need to force a barrier. >> > > [PATCH net-next] net: relax rtnl_dereference() > > rtnl_dereference() is used in contexts where RTNL is held, to fetch an > RCU protected pointer. > > Updates to this pointer are prevented by RTNL, so we dont need > smp_read_barrier_depends() and the ACCESS_ONCE() provided in > rcu_dereference_check(). > > rtnl_dereference() is mainly a macro to document the locking invariant. > > Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com> Applied, thanks. -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/include/linux/rtnetlink.h b/include/linux/rtnetlink.h index 68c436b..d3c4efa 100644 --- a/include/linux/rtnetlink.h +++ b/include/linux/rtnetlink.h @@ -754,20 +754,22 @@ extern int lockdep_rtnl_is_held(void); * @p: The pointer to read, prior to dereferencing * * Do an rcu_dereference(p), but check caller either holds rcu_read_lock() - * or RTNL + * or RTNL. Note : Please prefer rtnl_dereference() or rcu_dereference() */ #define rcu_dereference_rtnl(p) \ rcu_dereference_check(p, rcu_read_lock_held() || \ lockdep_rtnl_is_held()) /** - * rtnl_dereference - rcu_dereference with debug checking + * rtnl_dereference - fetch RCU pointer when updates are prevented by RTNL * @p: The pointer to read, prior to dereferencing * - * Do an rcu_dereference(p), but check caller holds RTNL + * Return the value of the specified RCU-protected pointer, but omit + * both the smp_read_barrier_depends() and the ACCESS_ONCE(), because + * caller holds RTNL. */ #define rtnl_dereference(p) \ - rcu_dereference_check(p, lockdep_rtnl_is_held()) + rcu_dereference_protected(p, lockdep_rtnl_is_held()) extern void rtnetlink_init(void); extern void __rtnl_unlock(void);