From: Or Har-Toov mlx5_lag_disable_mpesw() never resets the cached agg_max_tx_speed on the vports, unlike regular LAG teardown. This leaves stale speed values cached on struct mlx5_vport, and pushed to FW, after MPESW is torn down. Move the mlx5_lag_reset_vports_speed() call from mlx5_do_bond() into mlx5_deactivate_lag(), so that every teardown path resets the vport speeds. Fixes: 50f1d188c580 ("net/mlx5: Propagate LAG effective max_tx_speed to vports") Signed-off-by: Or Har-Toov Reviewed-by: Shay Drori Reviewed-by: Mark Bloch Signed-off-by: Tariq Toukan --- drivers/net/ethernet/mellanox/mlx5/core/lag/lag.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/drivers/net/ethernet/mellanox/mlx5/core/lag/lag.c b/drivers/net/ethernet/mellanox/mlx5/core/lag/lag.c index 5aa9d5c98fe1..c2f21eb4ea7c 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/lag/lag.c +++ b/drivers/net/ethernet/mellanox/mlx5/core/lag/lag.c @@ -1075,6 +1075,8 @@ int mlx5_deactivate_lag(struct mlx5_lag *ldev) if (master_idx < 0) return -EINVAL; + mlx5_lag_reset_vports_speed(ldev); + dev0 = mlx5_lag_pf(ldev, master_idx)->dev; ldev->mode = MLX5_LAG_MODE_NONE; ldev->mode_flags = 0; @@ -1676,7 +1678,6 @@ static void mlx5_do_bond(struct mlx5_lag *ldev) mlx5_modify_lag(ldev, &tracker); mlx5_lag_set_vports_agg_speed(ldev); } else if (mlx5_lag_should_disable_lag(ldev, do_bond)) { - mlx5_lag_reset_vports_speed(ldev); mlx5_disable_lag(ldev); } } -- 2.44.0