Hi, > -----Original Message----- > From: Bill Zhou <do...@mellanox.com> > Sent: Friday, June 12, 2020 11:58 AM > To: dev@dpdk.org > Cc: sta...@dpdk.org; Raslan Darawsheh <rasl...@mellanox.com>; Matan > Azrad <ma...@mellanox.com> > Subject: [PATCH] net/mlx5: fix LRO checksum completence > > The TCP checksum includes IPV4 pseudo-header checksum and L3 > payload checksum which include TCP header and TCP payload. > When mlx5 LRO is enabled, HW will calculate the TCP payload > checksum, PMD need complete the IPV4 pseudo-header checksum > and the TCP header checksum. > > The mlx5_lro_update_tcp_hdr function completes the TCP header > checksum, but this function using lower 4 bits of data-offset > field in TCP header to get the whole TCP header length, this > will cause TCP header checksum wrong calculation. > > Update the code using higher 4 bits of data-offset field > instead of lower 4 bits. > > Fixes: e4c2a16eb1de ("net/mlx5: handle LRO packets in Rx queue") > Cc: sta...@dpdk.org > > Signed-off-by: Bill Zhou <do...@mellanox.com> > Acked-by: Matan Azrad <ma...@mellanox.com> > --- > drivers/net/mlx5/mlx5_rxtx.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/drivers/net/mlx5/mlx5_rxtx.c b/drivers/net/mlx5/mlx5_rxtx.c > index 6a17a9a5d0..e4c1c95b0e 100644 > --- a/drivers/net/mlx5/mlx5_rxtx.c > +++ b/drivers/net/mlx5/mlx5_rxtx.c > @@ -1529,7 +1529,7 @@ mlx5_lro_update_tcp_hdr(struct rte_tcp_hdr > *restrict tcp, > if (cqe->lro_tcppsh_abort_dupack & MLX5_CQE_LRO_PUSH_MASK) > tcp->tcp_flags |= RTE_TCP_PSH_FLAG; > tcp->cksum = 0; > - csum += rte_raw_cksum(tcp, (tcp->data_off & 0xF) * 4); > + csum += rte_raw_cksum(tcp, (tcp->data_off >> 4) * 4); > csum = ((csum & 0xffff0000) >> 16) + (csum & 0xffff); > csum = (~csum) & 0xffff; > if (csum == 0) > -- > 2.21.0
Patch applied to next-net-mlx, Kindest regards, Raslan Darawsheh