net/mlx5e: Don't offload internal port if filter device is out device
authorJianbo Liu <jianbol@nvidia.com>
Tue, 12 Sep 2023 02:28:47 +0000 (02:28 +0000)
committerSaeed Mahameed <saeedm@nvidia.com>
Thu, 12 Oct 2023 18:10:35 +0000 (11:10 -0700)
In the cited commit, if the routing device is ovs internal port, the
out device is set to uplink, and packets go out after encapsulation.

If filter device is uplink, it can trigger the following syndrome:
mlx5_core 0000:08:00.0: mlx5_cmd_out_err:803:(pid 3966): SET_FLOW_TABLE_ENTRY(0x936) op_mod(0x0) failed, status bad parameter(0x3), syndrome (0xcdb051), err(-22)

Fix this issue by not offloading internal port if filter device is out
device. In this case, packets are not forwarded to the root table to
be processed, the termination table is used instead to forward them
from uplink to uplink.

Fixes: 100ad4e2d758 ("net/mlx5e: Offload internal port as encap route device")
Signed-off-by: Jianbo Liu <jianbol@nvidia.com>
Reviewed-by: Ariel Levkovich <lariel@nvidia.com>
Signed-off-by: Saeed Mahameed <saeedm@nvidia.com>
drivers/net/ethernet/mellanox/mlx5/core/en/tc_tun_encap.c

index 1730f6a..b10e40e 100644 (file)
@@ -24,7 +24,8 @@ static int mlx5e_set_int_port_tunnel(struct mlx5e_priv *priv,
 
        route_dev = dev_get_by_index(dev_net(e->out_dev), e->route_dev_ifindex);
 
-       if (!route_dev || !netif_is_ovs_master(route_dev))
+       if (!route_dev || !netif_is_ovs_master(route_dev) ||
+           attr->parse_attr->filter_dev == e->out_dev)
                goto out;
 
        err = mlx5e_set_fwd_to_int_port_actions(priv, attr, e->route_dev_ifindex,