diff options
| author | Jakub Kicinski <[email protected]> | 2025-04-08 19:59:52 +0000 |
|---|---|---|
| committer | Jakub Kicinski <[email protected]> | 2025-04-10 00:01:52 +0000 |
| commit | 03df156dd3a6d5992f17682cd5c3b11e5ffdae02 (patch) | |
| tree | bae9c0980d13aaec830ddfc17a5605068db1d6df /net/core/lock_debug.c | |
| parent | netdev: don't hold rtnl_lock over nl queue info get when possible (diff) | |
| download | kernel-03df156dd3a6d5992f17682cd5c3b11e5ffdae02.tar.gz kernel-03df156dd3a6d5992f17682cd5c3b11e5ffdae02.zip | |
xdp: double protect netdev->xdp_flags with netdev->lock
Protect xdp_features with netdev->lock. This way pure readers
no longer have to take rtnl_lock to access the field.
This includes calling NETDEV_XDP_FEAT_CHANGE under the lock.
Looks like that's fine for bonding, the only "real" listener,
it's the same as ethtool feature change.
In terms of normal drivers - only GVE need special consideration
(other drivers don't use instance lock or don't support XDP).
It calls xdp_set_features_flag() helper from gve_init_priv() which
in turn is called from gve_reset_recovery() (locked), or prior
to netdev registration. So switch to _locked.
Reviewed-by: Joe Damato <[email protected]>
Acked-by: Stanislav Fomichev <[email protected]>
Acked-by: Harshitha Ramamurthy <[email protected]>
Acked-by: Martin KaFai Lau <[email protected]>
Link: https://patch.msgid.link/[email protected]
Signed-off-by: Jakub Kicinski <[email protected]>
Diffstat (limited to 'net/core/lock_debug.c')
| -rw-r--r-- | net/core/lock_debug.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/net/core/lock_debug.c b/net/core/lock_debug.c index b7f22dc92a6f..598c443ef2f3 100644 --- a/net/core/lock_debug.c +++ b/net/core/lock_debug.c @@ -20,6 +20,7 @@ int netdev_debug_event(struct notifier_block *nb, unsigned long event, switch (cmd) { case NETDEV_REGISTER: case NETDEV_UP: + case NETDEV_XDP_FEAT_CHANGE: netdev_ops_assert_locked(dev); fallthrough; case NETDEV_DOWN: @@ -58,7 +59,6 @@ int netdev_debug_event(struct notifier_block *nb, unsigned long event, case NETDEV_OFFLOAD_XSTATS_DISABLE: case NETDEV_OFFLOAD_XSTATS_REPORT_USED: case NETDEV_OFFLOAD_XSTATS_REPORT_DELTA: - case NETDEV_XDP_FEAT_CHANGE: ASSERT_RTNL(); break; |
