]> git.proxmox.com Git - mirror_ubuntu-jammy-kernel.git/commitdiff
net/mlx5e: TC, fix decap fallback to uplink when int port not supported
authorAriel Levkovich <lariel@nvidia.com>
Mon, 25 Apr 2022 14:12:12 +0000 (17:12 +0300)
committerStefan Bader <stefan.bader@canonical.com>
Fri, 26 Aug 2022 08:54:31 +0000 (10:54 +0200)
BugLink: https://bugs.launchpad.net/bugs/1983498
When resolving the decap route device for a tunnel decap rule,
the result may be an OVS internal port device.

Prior to adding the support for internal port offload, such case
would result in using the uplink as the default decap route device
which allowed devices that can't support internal port offload
to offload this decap rule.

This behavior got broken by adding the internal port offload which
will fail in case the device can't support internal port offload.

To restore the old behavior, use the uplink device as the decap
route as before when internal port offload is not supported.

Fixes: b16eb3c81fe2 ("net/mlx5: Support internal port as decap route device")
Signed-off-by: Ariel Levkovich <lariel@nvidia.com>
Reviewed-by: Maor Dickman <maord@nvidia.com>
Signed-off-by: Saeed Mahameed <saeedm@nvidia.com>
(cherry picked from commit e3fdc71bcb6ffe1d4870a89252ba296a9558e294)
Signed-off-by: Zachary Tahenakos <zachary.tahenakos@canonical.com>
Acked-by: Stefan Bader <stefan.bader@canonical.com>
Acked-by: Tim Gardner <tim.gardner@canonical.com>
Signed-off-by: Stefan Bader <stefan.bader@canonical.com>
drivers/net/ethernet/mellanox/mlx5/core/en/tc_tun.c

index 3d54d482a14081c3990bf5d25c059862e22d540c..8937b5058f5e1c967bec62bea50d88455d6f6faf 100644 (file)
@@ -704,6 +704,7 @@ int mlx5e_tc_tun_route_lookup(struct mlx5e_priv *priv,
                              struct mlx5_flow_attr *flow_attr)
 {
        struct mlx5_esw_flow_attr *esw_attr = flow_attr->esw_attr;
+       struct mlx5_eswitch *esw = priv->mdev->priv.eswitch;
        struct mlx5e_tc_int_port *int_port;
        TC_TUN_ROUTE_ATTR_INIT(attr);
        u16 vport_num;
@@ -738,7 +739,7 @@ int mlx5e_tc_tun_route_lookup(struct mlx5e_priv *priv,
                esw_attr->rx_tun_attr->vni = MLX5_GET(fte_match_param, spec->match_value,
                                                      misc_parameters.vxlan_vni);
                esw_attr->rx_tun_attr->decap_vport = vport_num;
-       } else if (netif_is_ovs_master(attr.route_dev)) {
+       } else if (netif_is_ovs_master(attr.route_dev) && mlx5e_tc_int_port_supported(esw)) {
                int_port = mlx5e_tc_int_port_get(mlx5e_get_int_port_priv(priv),
                                                 attr.route_dev->ifindex,
                                                 MLX5E_TC_INT_PORT_INGRESS);