]> git.itanic.dy.fi Git - linux-stable/commitdiff
net/mlx5: Enable 4 ports multiport E-switch
authorShay Drory <shayd@nvidia.com>
Wed, 21 Jun 2023 17:25:00 +0000 (20:25 +0300)
committerSaeed Mahameed <saeedm@nvidia.com>
Wed, 20 Sep 2023 06:33:09 +0000 (23:33 -0700)
enable_mpesw() assumed only 2 ports are available, fix this by removing
that assumption and looping through the existing lag ports to enable multi-port
E-switch for cards with more than 2 ports.

Signed-off-by: Shay Drory <shayd@nvidia.com>
Reviewed-by: Mark Bloch <mbloch@nvidia.com>
Signed-off-by: Saeed Mahameed <saeedm@nvidia.com>
drivers/net/ethernet/mellanox/mlx5/core/lag/mpesw.c

index 4bf15391525c590787d7e64d7f7cc6586f1c301b..0857eebf4f07b4e504671a8ce81e671089087c1d 100644 (file)
@@ -65,12 +65,12 @@ static int mlx5_mpesw_metadata_set(struct mlx5_lag *ldev)
        return err;
 }
 
-#define MLX5_LAG_MPESW_OFFLOADS_SUPPORTED_PORTS 2
+#define MLX5_LAG_MPESW_OFFLOADS_SUPPORTED_PORTS 4
 static int enable_mpesw(struct mlx5_lag *ldev)
 {
        struct mlx5_core_dev *dev0 = ldev->pf[MLX5_LAG_P1].dev;
-       struct mlx5_core_dev *dev1 = ldev->pf[MLX5_LAG_P2].dev;
        int err;
+       int i;
 
        if (ldev->mode != MLX5_LAG_MODE_NONE)
                return -EINVAL;
@@ -98,11 +98,11 @@ static int enable_mpesw(struct mlx5_lag *ldev)
 
        dev0->priv.flags &= ~MLX5_PRIV_FLAGS_DISABLE_IB_ADEV;
        mlx5_rescan_drivers_locked(dev0);
-       err = mlx5_eswitch_reload_reps(dev0->priv.eswitch);
-       if (!err)
-               err = mlx5_eswitch_reload_reps(dev1->priv.eswitch);
-       if (err)
-               goto err_rescan_drivers;
+       for (i = 0; i < ldev->ports; i++) {
+               err = mlx5_eswitch_reload_reps(ldev->pf[i].dev->priv.eswitch);
+               if (err)
+                       goto err_rescan_drivers;
+       }
 
        return 0;
 
@@ -112,8 +112,8 @@ static int enable_mpesw(struct mlx5_lag *ldev)
        mlx5_deactivate_lag(ldev);
 err_add_devices:
        mlx5_lag_add_devices(ldev);
-       mlx5_eswitch_reload_reps(dev0->priv.eswitch);
-       mlx5_eswitch_reload_reps(dev1->priv.eswitch);
+       for (i = 0; i < ldev->ports; i++)
+               mlx5_eswitch_reload_reps(ldev->pf[i].dev->priv.eswitch);
        mlx5_mpesw_metadata_cleanup(ldev);
        return err;
 }