Message ID | 20240522192659.840796-9-tariqt@nvidia.com (mailing list archive) |
---|---|
State | Accepted |
Commit | 83fea49f2711fc90c0d115b0ed04046b45155b65 |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | mlx5 fixes 24-05-22 | expand |
On Wed, May 22, 2024 at 10:26:59PM +0300, Tariq Toukan wrote: > From: Gal Pressman <gal@nvidia.com> > > When the skb is encapsulated, adjust the inner UDP header instead of the > outer one, and account for UDP header (instead of TCP) in the inline > header size calculation. > > Fixes: 689adf0d4892 ("net/mlx5e: Add UDP GSO support") > Reported-by: Jason Baron <jbaron@akamai.com> > Closes: https://lore.kernel.org/netdev/c42961cb-50b9-4a9a-bd43-87fe48d88d29@akamai.com/ > Signed-off-by: Gal Pressman <gal@nvidia.com> > Reviewed-by: Dragos Tatulea <dtatulea@nvidia.com> > Reviewed-by: Boris Pismenny <borisp@nvidia.com> > Signed-off-by: Tariq Toukan <tariqt@nvidia.com> Thanks, This patch looks good to me. Reviewed-by: Simon Horman <horms@kernel.org> While looking over this patch, I noticed that it seems that a similar pattern to the mlx5e_tx_get_gso_ihs() code modified here appears in at least the MANA and NFP drivers. So perhaps we could consider a helper in future.
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_accel/en_accel.h b/drivers/net/ethernet/mellanox/mlx5/core/en_accel/en_accel.h index caa34b9c161e..33e32584b07f 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/en_accel/en_accel.h +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_accel/en_accel.h @@ -102,8 +102,14 @@ static inline void mlx5e_udp_gso_handle_tx_skb(struct sk_buff *skb) { int payload_len = skb_shinfo(skb)->gso_size + sizeof(struct udphdr); + struct udphdr *udphdr; - udp_hdr(skb)->len = htons(payload_len); + if (skb->encapsulation) + udphdr = (struct udphdr *)skb_inner_transport_header(skb); + else + udphdr = udp_hdr(skb); + + udphdr->len = htons(payload_len); } struct mlx5e_accel_tx_state { diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_tx.c b/drivers/net/ethernet/mellanox/mlx5/core/en_tx.c index 099bf1078889..b09e9abd39f3 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/en_tx.c +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_tx.c @@ -153,7 +153,11 @@ mlx5e_tx_get_gso_ihs(struct mlx5e_txqsq *sq, struct sk_buff *skb, int *hopbyhop) *hopbyhop = 0; if (skb->encapsulation) { - ihs = skb_inner_tcp_all_headers(skb); + if (skb_shinfo(skb)->gso_type & SKB_GSO_UDP_L4) + ihs = skb_inner_transport_offset(skb) + + sizeof(struct udphdr); + else + ihs = skb_inner_tcp_all_headers(skb); stats->tso_inner_packets++; stats->tso_inner_bytes += skb->len - ihs; } else {