]> git.ipfire.org Git - thirdparty/linux.git/commit
xdp: double protect netdev->xdp_flags with netdev->lock
authorJakub Kicinski <kuba@kernel.org>
Tue, 8 Apr 2025 19:59:52 +0000 (12:59 -0700)
committerJakub Kicinski <kuba@kernel.org>
Thu, 10 Apr 2025 00:01:52 +0000 (17:01 -0700)
commit03df156dd3a6d5992f17682cd5c3b11e5ffdae02
treebae9c0980d13aaec830ddfc17a5605068db1d6df
parentd02e3b388221562cc7acabe700e3d3a29e51ad1d
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 <jdamato@fastly.com>
Acked-by: Stanislav Fomichev <sdf@fomichev.me>
Acked-by: Harshitha Ramamurthy <hramamurthy@google.com>
Acked-by: Martin KaFai Lau <martin.lau@kernel.org>
Link: https://patch.msgid.link/20250408195956.412733-6-kuba@kernel.org
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Documentation/networking/netdevices.rst
drivers/net/ethernet/google/gve/gve_main.c
include/linux/netdevice.h
include/net/xdp.h
net/core/lock_debug.c
net/core/xdp.c