net/mlx5: E-Switch, Use vport metadata matching only when mandatory
authorMajd Dibbiny <majd@mellanox.com>
Mon, 27 Jan 2020 13:50:29 +0000 (15:50 +0200)
committerSaeed Mahameed <saeedm@mellanox.com>
Mon, 9 Mar 2020 23:58:35 +0000 (16:58 -0700)
Multi-port RoCE mode requires tagging traffic that passes through the
vport.
This matching can cause performance degradation, therefore disable it
and use the legacy matching on vhca_id and source_port when possible.

Fixes: 92ab1eb392c6 ("net/mlx5: E-Switch, Enable vport metadata matching if firmware supports it")
Signed-off-by: Majd Dibbiny <majd@mellanox.com>
Reviewed-by: Mark Bloch <markb@mellanox.com>
Signed-off-by: Saeed Mahameed <saeedm@mellanox.com>
drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads.c

index 4b5b661..bd26a18 100644 (file)
@@ -2021,6 +2021,18 @@ esw_check_vport_match_metadata_supported(const struct mlx5_eswitch *esw)
        return true;
 }
 
+static bool
+esw_check_vport_match_metadata_mandatory(const struct mlx5_eswitch *esw)
+{
+       return mlx5_core_mp_enabled(esw->dev);
+}
+
+static bool esw_use_vport_metadata(const struct mlx5_eswitch *esw)
+{
+       return esw_check_vport_match_metadata_mandatory(esw) &&
+              esw_check_vport_match_metadata_supported(esw);
+}
+
 int
 esw_vport_create_offloads_acl_tables(struct mlx5_eswitch *esw,
                                     struct mlx5_vport *vport)
@@ -2059,7 +2071,7 @@ static int esw_create_uplink_offloads_acl_tables(struct mlx5_eswitch *esw)
        struct mlx5_vport *vport;
        int err;
 
-       if (esw_check_vport_match_metadata_supported(esw))
+       if (esw_use_vport_metadata(esw))
                esw->flags |= MLX5_ESWITCH_VPORT_MATCH_METADATA;
 
        vport = mlx5_eswitch_get_vport(esw, MLX5_VPORT_UPLINK);