Some HW may invalidly set checksum error bit for the valid L4 checksum.
To avoid drop of the packets in that situation, do not indicate bad
checksum for L4 Rx csum offloads. Instead, set it as unknown, so the
application will re-verify this value.

The statistics counters will still work as previously.

Fixes: 05817057faba ("net/ena: fix indication of bad L4 Rx checksums")
Cc: sta...@dpdk.org

Signed-off-by: Michal Krawczyk <m...@semihalf.com>
---
 drivers/net/ena/ena_ethdev.c | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/drivers/net/ena/ena_ethdev.c b/drivers/net/ena/ena_ethdev.c
index 9f29cf04ac..0861206ea4 100644
--- a/drivers/net/ena/ena_ethdev.c
+++ b/drivers/net/ena/ena_ethdev.c
@@ -583,7 +583,13 @@ static inline void ena_rx_mbuf_prepare(struct ena_ring 
*rx_ring,
        } else {
                if (unlikely(ena_rx_ctx->l4_csum_err)) {
                        ++rx_stats->l4_csum_bad;
-                       ol_flags |= RTE_MBUF_F_RX_L4_CKSUM_BAD;
+                       /*
+                        * For the L4 Rx checksum offload the HW may indicate
+                        * bad checksum although it's valid. Because of that,
+                        * we're setting the UNKNOWN flag to let the app
+                        * re-verify the checksum.
+                        */
+                       ol_flags |= RTE_MBUF_F_RX_L4_CKSUM_UNKNOWN;
                } else {
                        ++rx_stats->l4_csum_good;
                        ol_flags |= RTE_MBUF_F_RX_L4_CKSUM_GOOD;
-- 
2.25.1

Reply via email to