diff options
author | David S. Miller <davem@davemloft.net> | 2023-12-18 02:05:45 +0000 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2023-12-18 02:05:45 +0000 |
commit | 610a689d2a57af3e21993cb6d8c3e5f839a8c89e (patch) | |
tree | 263284eb0373c4eb54f6573434bcb6b073b772fa /include/linux/rtnetlink.h | |
parent | 54f4c2570a19186dfebd555b163084c1824cf1d6 (diff) | |
parent | 174523479aae31b17c043de127c87ff2aef3d54e (diff) |
Merge branch 'rtnl-rcu'
Pedro Tammela says:
====================
net: rtnl: introduce rcu_replace_pointer_rtnl
Introduce the rcu_replace_pointer_rtnl helper to lockdep check rtnl lock
rcu replacements, alongside the already existing helpers.
Patch 2 uses the new helper in the rtnl_unregister_* functions.
Originally this change was part of the P4TC series, as it's a recurrent
pattern there, but since it has a use case in mainline we are pushing it
separately.
====================
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include/linux/rtnetlink.h')
-rw-r--r-- | include/linux/rtnetlink.h | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/include/linux/rtnetlink.h b/include/linux/rtnetlink.h index 6a8543b34e2c..410529fca18b 100644 --- a/include/linux/rtnetlink.h +++ b/include/linux/rtnetlink.h @@ -79,6 +79,18 @@ static inline bool lockdep_rtnl_is_held(void) #define rtnl_dereference(p) \ rcu_dereference_protected(p, lockdep_rtnl_is_held()) +/** + * rcu_replace_pointer_rtnl - replace an RCU pointer under rtnl_lock, returning + * its old value + * @rp: RCU pointer, whose value is returned + * @p: regular pointer + * + * Perform a replacement under rtnl_lock, where @rp is an RCU-annotated + * pointer. The old value of @rp is returned, and @rp is set to @p + */ +#define rcu_replace_pointer_rtnl(rp, p) \ + rcu_replace_pointer(rp, p, lockdep_rtnl_is_held()) + static inline struct netdev_queue *dev_ingress_queue(struct net_device *dev) { return rtnl_dereference(dev->ingress_queue); |