Skip to content

Commit bd7b9f8

Browse files
shayshyikuba-moo
authored andcommitted
net/mlx5: LAG, disable MPESW in lag_disable_change()
mlx5_lag_disable_change() unconditionally called mlx5_disable_lag() when LAG was active, which is incorrect for MLX5_LAG_MODE_MPESW. Hnece, call mlx5_disable_mpesw() when running in MPESW mode. Fixes: a32327a ("net/mlx5: Lag, Control MultiPort E-Switch single FDB mode") Signed-off-by: Shay Drory <[email protected]> Reviewed-by: Mark Bloch <[email protected]> Signed-off-by: Tariq Toukan <[email protected]> Reviewed-by: Simon Horman <[email protected]> Link: https://patch.msgid.link/[email protected] Signed-off-by: Jakub Kicinski <[email protected]>
1 parent 2700b7e commit bd7b9f8

3 files changed

Lines changed: 15 additions & 6 deletions

File tree

drivers/net/ethernet/mellanox/mlx5/core/lag/lag.c

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1869,8 +1869,12 @@ void mlx5_lag_disable_change(struct mlx5_core_dev *dev)
18691869
mutex_lock(&ldev->lock);
18701870

18711871
ldev->mode_changes_in_progress++;
1872-
if (__mlx5_lag_is_active(ldev))
1873-
mlx5_disable_lag(ldev);
1872+
if (__mlx5_lag_is_active(ldev)) {
1873+
if (ldev->mode == MLX5_LAG_MODE_MPESW)
1874+
mlx5_lag_disable_mpesw(ldev);
1875+
else
1876+
mlx5_disable_lag(ldev);
1877+
}
18741878

18751879
mutex_unlock(&ldev->lock);
18761880
mlx5_devcom_comp_unlock(dev->priv.hca_devcom_comp);

drivers/net/ethernet/mellanox/mlx5/core/lag/mpesw.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ static int mlx5_mpesw_metadata_set(struct mlx5_lag *ldev)
6565
return err;
6666
}
6767

68-
static int enable_mpesw(struct mlx5_lag *ldev)
68+
static int mlx5_lag_enable_mpesw(struct mlx5_lag *ldev)
6969
{
7070
struct mlx5_core_dev *dev0;
7171
int err;
@@ -126,7 +126,7 @@ static int enable_mpesw(struct mlx5_lag *ldev)
126126
return err;
127127
}
128128

129-
static void disable_mpesw(struct mlx5_lag *ldev)
129+
void mlx5_lag_disable_mpesw(struct mlx5_lag *ldev)
130130
{
131131
if (ldev->mode == MLX5_LAG_MODE_MPESW) {
132132
mlx5_mpesw_metadata_cleanup(ldev);
@@ -152,9 +152,9 @@ static void mlx5_mpesw_work(struct work_struct *work)
152152
}
153153

154154
if (mpesww->op == MLX5_MPESW_OP_ENABLE)
155-
mpesww->result = enable_mpesw(ldev);
155+
mpesww->result = mlx5_lag_enable_mpesw(ldev);
156156
else if (mpesww->op == MLX5_MPESW_OP_DISABLE)
157-
disable_mpesw(ldev);
157+
mlx5_lag_disable_mpesw(ldev);
158158
unlock:
159159
mutex_unlock(&ldev->lock);
160160
mlx5_devcom_comp_unlock(devcom);

drivers/net/ethernet/mellanox/mlx5/core/lag/mpesw.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,11 @@ int mlx5_lag_mpesw_do_mirred(struct mlx5_core_dev *mdev,
3131
bool mlx5_lag_is_mpesw(struct mlx5_core_dev *dev);
3232
void mlx5_lag_mpesw_disable(struct mlx5_core_dev *dev);
3333
int mlx5_lag_mpesw_enable(struct mlx5_core_dev *dev);
34+
#ifdef CONFIG_MLX5_ESWITCH
35+
void mlx5_lag_disable_mpesw(struct mlx5_lag *ldev);
36+
#else
37+
static inline void mlx5_lag_disable_mpesw(struct mlx5_lag *ldev) {}
38+
#endif /* CONFIG_MLX5_ESWITCH */
3439

3540
#ifdef CONFIG_MLX5_ESWITCH
3641
void mlx5_mpesw_speed_update_work(struct work_struct *work);

0 commit comments

Comments
 (0)