| From 8ddfc28f778f867a1a1008676f4fca0eb2a0a589 Mon Sep 17 00:00:00 2001 |
| From: Alex Vesker <valex@mellanox.com> |
| Date: Thu, 5 Mar 2020 14:38:41 +0200 |
| Subject: [PATCH] IB/mlx5: Replace tunnel mpls capability bits for |
| tunnel_offloads |
| |
| 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: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/drivers/infiniband/hw/mlx5/main.c b/drivers/infiniband/hw/mlx5/main.c |
| index 41b86068eb6f..c4bc29b79c37 100644 |
| --- a/drivers/infiniband/hw/mlx5/main.c |
| +++ b/drivers/infiniband/hw/mlx5/main.c |
| @@ -1178,12 +1178,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; |
| } |
| diff --git a/include/linux/mlx5/mlx5_ifc.h b/include/linux/mlx5/mlx5_ifc.h |
| index 1aee3f47cd6e..3d1e4a53b9e4 100644 |
| --- a/include/linux/mlx5/mlx5_ifc.h |
| +++ b/include/linux/mlx5/mlx5_ifc.h |
| @@ -750,7 +750,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]; |
| -- |
| 2.7.4 |
| |