Message ID | 1283890291.2634.143.camel@edumazet-laptop |
---|---|
State | Superseded, archived |
Delegated to: | David Miller |
Headers | show |
Eric Dumazet wrote, On 09/07/2010 10:11 PM: > We use rcu_dereference_check(p, rcu_read_lock_held() || > lockdep_rtnl_is_held()) several times in network stack. > > More usages to come too, so its time to create a helper. > > Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com> > --- > include/linux/rtnetlink.h | 12 ++++++++++++ > > diff --git a/include/linux/rtnetlink.h b/include/linux/rtnetlink.h > index 58d4449..5ba48bb 100644 > --- a/include/linux/rtnetlink.h > +++ b/include/linux/rtnetlink.h > @@ -745,10 +745,22 @@ extern void rtnl_lock(void); > extern void rtnl_unlock(void); > extern int rtnl_trylock(void); > extern int rtnl_is_locked(void); > + > #ifdef CONFIG_PROVE_LOCKING > extern int lockdep_rtnl_is_held(void); > #endif /* #ifdef CONFIG_PROVE_LOCKING */ > > +/** > + * rcu_dereference_read_lock_or_rtnl - rcu_dereference with debug checking > + * @p: The pointer to read, prior to dereferencing > + * > + * Do an rcu_dereference(p), but check caller either holds rcu_read_lock() > + * or RTNL > + */ > +#define rcu_dereference_read_lock_or_rtnl(p) My proposal is to shorten the name, and since rcu_read_lock part seems obvious, maybe rcu_dereference_rtnl() only? Jarek P. \ > + rcu_dereference_check(p, rcu_read_lock_held() || \ > + lockdep_rtnl_is_held()); > + > extern void rtnetlink_init(void); > extern void __rtnl_unlock(void); > > > > -- > 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 > -- 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 58d4449..5ba48bb 100644 --- a/include/linux/rtnetlink.h +++ b/include/linux/rtnetlink.h @@ -745,10 +745,22 @@ extern void rtnl_lock(void); extern void rtnl_unlock(void); extern int rtnl_trylock(void); extern int rtnl_is_locked(void); + #ifdef CONFIG_PROVE_LOCKING extern int lockdep_rtnl_is_held(void); #endif /* #ifdef CONFIG_PROVE_LOCKING */ +/** + * rcu_dereference_read_lock_or_rtnl - rcu_dereference with debug checking + * @p: The pointer to read, prior to dereferencing + * + * Do an rcu_dereference(p), but check caller either holds rcu_read_lock() + * or RTNL + */ +#define rcu_dereference_read_lock_or_rtnl(p) \ + rcu_dereference_check(p, rcu_read_lock_held() || \ + lockdep_rtnl_is_held()); + extern void rtnetlink_init(void); extern void __rtnl_unlock(void);
We use rcu_dereference_check(p, rcu_read_lock_held() || lockdep_rtnl_is_held()) several times in network stack. More usages to come too, so its time to create a helper. Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com> --- include/linux/rtnetlink.h | 12 ++++++++++++ -- 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