IB/mlx5: Replace tunnel mpls capability bits for tunnel_offloads
authorAlex Vesker <valex@mellanox.com>
Thu, 5 Mar 2020 12:38:41 +0000 (14:38 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 13 Apr 2020 08:48:10 +0000 (10:48 +0200)
commit 41e684ef3f37ce6e5eac3fb5b9c7c1853f4b0447 upstream.

Until now the flex parser capability was used in ib_query_device() to
indicate tunnel_offloads_caps support for mpls_over_gre/mpls_over_udp.

Newer devices and firmware will have configurations with the flexparser
but without mpls support.

Testing for the flex parser capability was a mistake, the tunnel_stateless
capability was intended for detecting mpls and was introduced at the same
time as the flex parser capability.

Otherwise userspace will be incorrectly informed that a future device
supports MPLS when it does not.

Link: https://lore.kernel.org/r/20200305123841.196086-1-leon@kernel.org
Cc: <stable@vger.kernel.org> # 4.17
Fixes: e818e255a58d ("IB/mlx5: Expose MPLS related tunneling offloads")
Signed-off-by: Alex Vesker <valex@mellanox.com>
Reviewed-by: Ariel Levkovich <lariel@mellanox.com>
Signed-off-by: Leon Romanovsky <leonro@mellanox.com>
Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/infiniband/hw/mlx5/main.c
include/linux/mlx5/mlx5_ifc.h

index 0a160fd..4f44a73 100644 (file)
@@ -1181,12 +1181,10 @@ static int mlx5_ib_query_device(struct ib_device *ibdev,
                if (MLX5_CAP_ETH(mdev, tunnel_stateless_gre))
                        resp.tunnel_offloads_caps |=
                                MLX5_IB_TUNNELED_OFFLOADS_GRE;
-               if (MLX5_CAP_GEN(mdev, flex_parser_protocols) &
-                   MLX5_FLEX_PROTO_CW_MPLS_GRE)
+               if (MLX5_CAP_ETH(mdev, tunnel_stateless_mpls_over_gre))
                        resp.tunnel_offloads_caps |=
                                MLX5_IB_TUNNELED_OFFLOADS_MPLS_GRE;
-               if (MLX5_CAP_GEN(mdev, flex_parser_protocols) &
-                   MLX5_FLEX_PROTO_CW_MPLS_UDP)
+               if (MLX5_CAP_ETH(mdev, tunnel_stateless_mpls_over_udp))
                        resp.tunnel_offloads_caps |=
                                MLX5_IB_TUNNELED_OFFLOADS_MPLS_UDP;
        }
index 0cdc8d1..acd859e 100644 (file)
@@ -857,7 +857,11 @@ struct mlx5_ifc_per_protocol_networking_offload_caps_bits {
        u8         swp_csum[0x1];
        u8         swp_lso[0x1];
        u8         cqe_checksum_full[0x1];
-       u8         reserved_at_24[0x5];
+       u8         tunnel_stateless_geneve_tx[0x1];
+       u8         tunnel_stateless_mpls_over_udp[0x1];
+       u8         tunnel_stateless_mpls_over_gre[0x1];
+       u8         tunnel_stateless_vxlan_gpe[0x1];
+       u8         tunnel_stateless_ipv4_over_vxlan[0x1];
        u8         tunnel_stateless_ip_over_ip[0x1];
        u8         reserved_at_2a[0x6];
        u8         max_vxlan_udp_ports[0x8];