]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
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>
Fri, 17 Apr 2020 08:48:43 +0000 (10:48 +0200)
[ Upstream commit 41e684ef3f37ce6e5eac3fb5b9c7c1853f4b0447 ]

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: Sasha Levin <sashal@kernel.org>
drivers/infiniband/hw/mlx5/main.c
include/linux/mlx5/mlx5_ifc.h

index 2db34f7b5ced1b781569565ea50498309b2e72c5..f41f3ff689c55e22e3963b7252558a47c0540813 100644 (file)
@@ -1070,12 +1070,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 76b76b6aa83d0634af2ba7999e1d925683456ab9..b87b1569d15b5c190d6a02d8cef09cdc77b3ae5d 100644 (file)
@@ -672,7 +672,14 @@ struct mlx5_ifc_per_protocol_networking_offload_caps_bits {
        u8         swp[0x1];
        u8         swp_csum[0x1];
        u8         swp_lso[0x1];
-       u8         reserved_at_23[0xd];
+       u8         cqe_checksum_full[0x1];
+       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];
        u8         reserved_at_38[0x6];
        u8         max_geneve_opt_len[0x1];