net/mlx5: LAG, disable both regular and SD LAG on lag_disable_change

Extend mlx5_lag_disable_change() to properly disable both regular LAG
and SD LAG when requested. Each LAG type uses its own devcom component
for locking.

Use mlx5_sd_get_devcom() helper to retrieve the SD devcom component,
needed for proper locking when disabling SD LAG.

Signed-off-by: Shay Drory <shayd@nvidia.com>
Reviewed-by: Mark Bloch <mbloch@nvidia.com>
Signed-off-by: Tariq Toukan <tariqt@nvidia.com>
Link: https://patch.msgid.link/20260612113904.537595-11-tariqt@nvidia.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
Shay Drory 2026-06-12 14:38:59 +03:00 committed by Jakub Kicinski
parent eaaf1ff178
commit ebd629e700

View File

@ -2494,13 +2494,22 @@ EXPORT_SYMBOL(mlx5_lag_is_shared_fdb);
void mlx5_lag_disable_change(struct mlx5_core_dev *dev)
{
struct mlx5_devcom_comp_dev *sd_devcom = mlx5_sd_get_devcom(dev);
struct mlx5_core_dev *primary = dev;
struct mlx5_lag *ldev;
struct lag_func *pf;
int i;
ldev = mlx5_lag_dev(dev);
if (!ldev)
return;
mlx5_devcom_comp_lock(dev->priv.hca_devcom_comp);
if (sd_devcom) {
mlx5_devcom_comp_lock(sd_devcom);
primary = mlx5_sd_get_primary(dev) ?: dev;
mlx5_devcom_comp_unlock(sd_devcom);
}
mlx5_devcom_comp_lock(primary->priv.hca_devcom_comp);
mutex_lock(&ldev->lock);
ldev->mode_changes_in_progress++;
@ -2512,7 +2521,23 @@ void mlx5_lag_disable_change(struct mlx5_core_dev *dev)
}
mutex_unlock(&ldev->lock);
mlx5_devcom_comp_unlock(dev->priv.hca_devcom_comp);
mlx5_devcom_comp_unlock(primary->priv.hca_devcom_comp);
if (!sd_devcom)
return;
/* Teardown SD shared FDB for this device's group if active */
mlx5_devcom_comp_lock(sd_devcom);
mutex_lock(&ldev->lock);
mlx5_lag_for_each(i, 0, ldev, MLX5_LAG_FILTER_ALL) {
pf = mlx5_lag_pf(ldev, i);
if (pf->dev == dev && pf->sd_fdb_active) {
mlx5_lag_shared_fdb_destroy(ldev, pf->group_id);
break;
}
}
mutex_unlock(&ldev->lock);
mlx5_devcom_comp_unlock(sd_devcom);
}
void mlx5_lag_enable_change(struct mlx5_core_dev *dev)