Skip to content

Commit c52eed4

Browse files
committed
ice: Fix LACP bonds without SRIOV environment
JIRA: https://issues.redhat.com/browse/RHEL-83543 Upstream commit(s): commit 6c778f1 Author: Dave Ertman <[email protected]> Date: Mon Apr 28 15:33:39 2025 -0400 ice: Fix LACP bonds without SRIOV environment If an aggregate has the following conditions: - The SRIOV LAG DDP package has been enabled - The bond is in 802.3ad LACP mode - The bond is disqualified from supporting SRIOV VF LAG - Both interfaces were added simultaneously to the bond (same command) Then there is a chance that the two interfaces will be assigned different LACP Aggregator ID's. This will cause a failure of the LACP control over the bond. To fix this, we can detect if the primary interface for the bond (as defined by the driver) is not in switchdev mode, and exit the setup flow if so. Reproduction steps: %> ip link add bond0 type bond mode 802.3ad miimon 100 %> ip link set bond0 up %> ifenslave bond0 eth0 eth1 %> cat /proc/net/bonding/bond0 | grep Agg Check for Aggregator IDs that differ. Fixes: ec5a6c5 ("ice: process events created by lag netdev event handler") Reviewed-by: Aleksandr Loktionov <[email protected]> Signed-off-by: Dave Ertman <[email protected]> Tested-by: Sujai Buvaneswaran <[email protected]> Signed-off-by: Tony Nguyen <[email protected]> Signed-off-by: Petr Oros <[email protected]>
1 parent 1c7f0d2 commit c52eed4

File tree

1 file changed

+6
-0
lines changed

1 file changed

+6
-0
lines changed

drivers/net/ethernet/intel/ice/ice_lag.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1321,12 +1321,18 @@ static void ice_lag_changeupper_event(struct ice_lag *lag, void *ptr)
13211321
*/
13221322
if (!primary_lag) {
13231323
lag->primary = true;
1324+
if (!ice_is_switchdev_running(lag->pf))
1325+
return;
1326+
13241327
/* Configure primary's SWID to be shared */
13251328
ice_lag_primary_swid(lag, true);
13261329
primary_lag = lag;
13271330
} else {
13281331
u16 swid;
13291332

1333+
if (!ice_is_switchdev_running(primary_lag->pf))
1334+
return;
1335+
13301336
swid = primary_lag->pf->hw.port_info->sw_id;
13311337
ice_lag_set_swid(swid, lag, true);
13321338
ice_lag_add_prune_list(primary_lag, lag->pf);

0 commit comments

Comments
 (0)