net/mlx5e: en_tc, re-factor query route port
authorMark Bloch <mbloch@nvidia.com>
Wed, 30 Mar 2022 08:51:16 +0000 (08:51 +0000)
committerSaeed Mahameed <saeedm@nvidia.com>
Fri, 2 Jun 2023 19:10:46 +0000 (12:10 -0700)
query for peer esw outside of if scope.
This is preparation for query route port over multiple peers.

Signed-off-by: Mark Bloch <mbloch@nvidia.com>
Reviewed-by: Roi Dayan <roid@nvidia.com>
Signed-off-by: Saeed Mahameed <saeedm@nvidia.com>
drivers/net/ethernet/mellanox/mlx5/core/en_tc.c

index 6f9adb9..a096005 100644 (file)
@@ -1666,8 +1666,10 @@ int mlx5e_tc_query_route_vport(struct net_device *out_dev, struct net_device *ro
 {
        struct mlx5e_priv *out_priv, *route_priv;
        struct mlx5_core_dev *route_mdev;
+       struct mlx5_devcom *devcom;
        struct mlx5_eswitch *esw;
        u16 vhca_id;
+       int err;
 
        out_priv = netdev_priv(out_dev);
        esw = out_priv->mdev->priv.eswitch;
@@ -1675,28 +1677,20 @@ int mlx5e_tc_query_route_vport(struct net_device *out_dev, struct net_device *ro
        route_mdev = route_priv->mdev;
 
        vhca_id = MLX5_CAP_GEN(route_mdev, vhca_id);
-       if (mlx5_lag_is_active(out_priv->mdev)) {
-               struct mlx5_devcom *devcom;
-               int err;
-
-               /* In lag case we may get devices from different eswitch instances.
-                * If we failed to get vport num, it means, mostly, that we on the wrong
-                * eswitch.
-                */
-               err = mlx5_eswitch_vhca_id_to_vport(esw, vhca_id, vport);
-               if (err != -ENOENT)
-                       return err;
-
-               rcu_read_lock();
-               devcom = out_priv->mdev->priv.devcom;
-               esw = mlx5_devcom_get_peer_data_rcu(devcom, MLX5_DEVCOM_ESW_OFFLOADS);
-               err = esw ? mlx5_eswitch_vhca_id_to_vport(esw, vhca_id, vport) : -ENODEV;
-               rcu_read_unlock();
+       err = mlx5_eswitch_vhca_id_to_vport(esw, vhca_id, vport);
+       if (!err)
+               return err;
 
+       if (!mlx5_lag_is_active(out_priv->mdev))
                return err;
-       }
 
-       return mlx5_eswitch_vhca_id_to_vport(esw, vhca_id, vport);
+       rcu_read_lock();
+       devcom = out_priv->mdev->priv.devcom;
+       esw = mlx5_devcom_get_peer_data_rcu(devcom, MLX5_DEVCOM_ESW_OFFLOADS);
+       err = esw ? mlx5_eswitch_vhca_id_to_vport(esw, vhca_id, vport) : -ENODEV;
+       rcu_read_unlock();
+
+       return err;
 }
 
 static int