mirror of
https://github.com/torvalds/linux.git
synced 2026-07-27 09:36:22 +02:00
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:
parent
eaaf1ff178
commit
ebd629e700
|
|
@ -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)
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user