From: Olivier Matz Date: Thu, 13 Oct 2016 13:40:30 +0000 (+0200) Subject: app/testpmd: fix TSO with checksum engine X-Git-Url: http://git.droids-corp.org/?p=dpdk.git;a=commitdiff_plain;h=e834daaf911d79154fbd89bea003a2f4eda17dab app/testpmd: fix TSO with checksum engine The commit that disabled TSO for small packets was broken during the rebase. The problem is the IP checksum is not calculated in software if: - TX IP checksum is disabled - TSO is enabled - the current packet is smaller than tso segment size When checking if the PKT_TX_IP_CKSUM flag should be set (in case of tso), use the local tso_segsz variable, which is set to 0 when the packet is too small to require tso. Therefore the IP checksum will be correctly calculated in software. Moreover, we should not use tunnel segment size for non-tunnel tso, else TSO will stay disabled for all packets. Fixes: 97c21329d42b ("app/testpmd: do not use TSO for small packets") Signed-off-by: Olivier Matz --- diff --git a/app/test-pmd/csumonly.c b/app/test-pmd/csumonly.c index f9e65b6bb7..27d0f08802 100644 --- a/app/test-pmd/csumonly.c +++ b/app/test-pmd/csumonly.c @@ -336,7 +336,7 @@ process_inner_cksums(void *l3_hdr, const struct testpmd_offload_info *info, if (!info->is_tunnel) { max_pkt_len = info->l2_len + info->l3_len + info->l4_len + info->tso_segsz; - if (info->tunnel_tso_segsz != 0 && info->pkt_len > max_pkt_len) + if (info->tso_segsz != 0 && info->pkt_len > max_pkt_len) tso_segsz = info->tso_segsz; } else { max_pkt_len = info->outer_l2_len + info->outer_l3_len + @@ -351,9 +351,7 @@ process_inner_cksums(void *l3_hdr, const struct testpmd_offload_info *info, ipv4_hdr->hdr_checksum = 0; ol_flags |= PKT_TX_IPV4; - if (info->l4_proto == IPPROTO_TCP && - ((info->is_tunnel && info->tunnel_tso_segsz != 0) || - (!info->is_tunnel && info->tso_segsz != 0))) { + if (info->l4_proto == IPPROTO_TCP && tso_segsz) { ol_flags |= PKT_TX_IP_CKSUM; } else { if (testpmd_ol_flags & TESTPMD_TX_OFFLOAD_IP_CKSUM)