net/mlx5: VLAN push on RX, pop on TX
authorDima Chumak <dchumak@nvidia.com>
Mon, 13 Dec 2021 11:21:46 +0000 (13:21 +0200)
committerSaeed Mahameed <saeedm@nvidia.com>
Thu, 27 Jan 2022 20:37:36 +0000 (12:37 -0800)
Some older NIC hardware isn't capable of doing VLAN push on RX and pop
on TX.

A workaround has been added in software to support it, but it has a
performance penalty since it requires a hairpin + loopback.

There's no such limitation with the newer NICs, so no need to pay the
price of the w/a. With this change the software w/a is disabled for
certain HW versions and steering modes that support it.

Signed-off-by: Dima Chumak <dchumak@nvidia.com>
Reviewed-by: Oz Shlomo <ozsh@nvidia.com>
Signed-off-by: Saeed Mahameed <saeedm@nvidia.com>
drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads_termtbl.c

index 4b354aed784a75bf23ca1f445cd8557fd0ab5f21..ee568bf34ae25d73e675405e113c7ac5b4415ce7 100644 (file)
@@ -224,7 +224,9 @@ mlx5_eswitch_termtbl_required(struct mlx5_eswitch *esw,
                return false;
 
        /* push vlan on RX */
-       if (flow_act->action & MLX5_FLOW_CONTEXT_ACTION_VLAN_PUSH)
+       if (flow_act->action & MLX5_FLOW_CONTEXT_ACTION_VLAN_PUSH &&
+           !(mlx5_fs_get_capabilities(esw->dev, MLX5_FLOW_NAMESPACE_FDB) &
+             MLX5_FLOW_STEERING_CAP_VLAN_PUSH_ON_RX))
                return true;
 
        /* hairpin */