Commit 484d3675 authored by Song Yoong Siang's avatar Song Yoong Siang Committed by Jakub Kicinski
Browse files

igc: Allow hot-swapping XDP program



Currently, the driver would always close and reopen the network interface
when setting/removing the XDP program, regardless of the presence of XDP
resources. This could cause unnecessary disruptions.

To avoid this, introduces a check to determine if there is a need to
close and reopen the interface, allowing for seamless hot-swapping of
XDP programs.

Signed-off-by: default avatarSong Yoong Siang <yoong.siang.song@intel.com>
Acked-by: default avatarMaciej Fijalkowski <maciej.fijalkowski@intel.com>
Tested-by: default avatarAvigail Dahan <avigailx.dahan@intel.com>
Signed-off-by: default avatarTony Nguyen <anthony.l.nguyen@intel.com>
Link: https://patch.msgid.link/20250106221929.956999-8-anthony.l.nguyen@intel.com


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent f8e284a0
Loading
Loading
Loading
Loading
+4 −2
Original line number Diff line number Diff line
@@ -13,6 +13,7 @@ int igc_xdp_set_prog(struct igc_adapter *adapter, struct bpf_prog *prog,
	struct net_device *dev = adapter->netdev;
	bool if_running = netif_running(dev);
	struct bpf_prog *old_prog;
	bool need_update;

	if (dev->mtu > ETH_DATA_LEN) {
		/* For now, the driver doesn't support XDP functionality with
@@ -22,7 +23,8 @@ int igc_xdp_set_prog(struct igc_adapter *adapter, struct bpf_prog *prog,
		return -EOPNOTSUPP;
	}

	if (if_running)
	need_update = !!adapter->xdp_prog != !!prog;
	if (if_running && need_update)
		igc_close(dev);

	old_prog = xchg(&adapter->xdp_prog, prog);
@@ -34,7 +36,7 @@ int igc_xdp_set_prog(struct igc_adapter *adapter, struct bpf_prog *prog,
	else
		xdp_features_clear_redirect_target(dev);

	if (if_running)
	if (if_running && need_update)
		igc_open(dev);

	return 0;