]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
net/mlx5: make enable_mpesw idempotent
authorMoshe Shemesh <moshe@nvidia.com>
Mon, 1 Dec 2025 15:13:27 +0000 (17:13 +0200)
committerPaolo Abeni <pabeni@redhat.com>
Thu, 4 Dec 2025 10:55:20 +0000 (11:55 +0100)
The enable_mpesw() function returns -EINVAL if ldev->mode is not
MLX5_LAG_MODE_NONE. This means attempting to enable MPESW mode when it's
already enabled will fail. In contrast, disable_mpesw() properly checks
if the mode is MLX5_LAG_MODE_MPESW before proceeding, making it
naturally idempotent and safe to call multiple times.

Fix enable_mpesw() to return success if mpesw is already enabled.

Fixes: a32327a3a02c ("net/mlx5: Lag, Control MultiPort E-Switch single FDB mode")
Signed-off-by: Moshe Shemesh <moshe@nvidia.com>
Reviewed-by: Shay Drori <shayd@nvidia.com>
Signed-off-by: Tariq Toukan <tariqt@nvidia.com>
Reviewed-by: Simon Horman <horms@kernel.org>
Link: https://patch.msgid.link/1764602008-1334866-2-git-send-email-tariqt@nvidia.com
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
drivers/net/ethernet/mellanox/mlx5/core/lag/mpesw.c

index aad52d3a90e68b0c93321ffcb62b25f0e9478a6d..2d86af8f0d9b818d4f6bbc6a009c6dea657d31be 100644 (file)
@@ -67,12 +67,19 @@ err_metadata:
 
 static int enable_mpesw(struct mlx5_lag *ldev)
 {
-       int idx = mlx5_lag_get_dev_index_by_seq(ldev, MLX5_LAG_P1);
        struct mlx5_core_dev *dev0;
        int err;
+       int idx;
        int i;
 
-       if (idx < 0 || ldev->mode != MLX5_LAG_MODE_NONE)
+       if (ldev->mode == MLX5_LAG_MODE_MPESW)
+               return 0;
+
+       if (ldev->mode != MLX5_LAG_MODE_NONE)
+               return -EINVAL;
+
+       idx = mlx5_lag_get_dev_index_by_seq(ldev, MLX5_LAG_P1);
+       if (idx < 0)
                return -EINVAL;
 
        dev0 = ldev->pf[idx].dev;