From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 112E148B69 for ; Fri, 21 Nov 2025 12:22:41 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 0ACC64026F; Fri, 21 Nov 2025 12:22:41 +0100 (CET) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by mails.dpdk.org (Postfix) with ESMTP id 10612402A6 for ; Fri, 21 Nov 2025 12:22:38 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1763724158; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=G8nczLEgg4wo0VhECDxwKDoCM64sTKRq6bY7MTrM60c=; b=gm0LVEx9tKpoOSM2DTO/DWbY3KoWOfS4DADjAdg84HFL6hcXN6Y4RTL3M8cESyXh5eSg7t gjLB8JYyW48wITklPDJwgg1IW1U8f7EAEudo5JLsz4iIkmuOkSV1siUfqiachmAcjEcF1p b5ryf5plQJ2dqvBC1Pu67uPmhwCZEqw= Received: from mx-prod-mc-06.mail-002.prod.us-west-2.aws.redhat.com (ec2-35-165-154-97.us-west-2.compute.amazonaws.com [35.165.154.97]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-312-OtD3FnEJMH-b4palxLDweA-1; Fri, 21 Nov 2025 06:22:37 -0500 X-MC-Unique: OtD3FnEJMH-b4palxLDweA-1 X-Mimecast-MFC-AGG-ID: OtD3FnEJMH-b4palxLDweA_1763724156 Received: from mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.4]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-06.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 0F2C0180009D; Fri, 21 Nov 2025 11:22:36 +0000 (UTC) Received: from rh.redhat.com (unknown [10.42.28.165]) by mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id DE77B30044DB; Fri, 21 Nov 2025 11:22:34 +0000 (UTC) From: Kevin Traynor To: Jiawen Wu Cc: dpdk stable Subject: patch 'net/txgbe: fix checksum error counter' has been queued to stable release 24.11.4 Date: Fri, 21 Nov 2025 11:20:06 +0000 Message-ID: <20251121112128.485623-22-ktraynor@redhat.com> In-Reply-To: <20251121112128.485623-1-ktraynor@redhat.com> References: <20251121112128.485623-1-ktraynor@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.4 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: yxnjjkYs25KBjYf5L68ZYutlndw0lASbf9aI_ZwTaks_1763724156 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: 8bit content-type: text/plain; charset="US-ASCII"; x-default=true X-BeenThere: stable@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: patches for DPDK stable branches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: stable-bounces@dpdk.org Hi, FYI, your patch has been queued to stable release 24.11.4 Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet. It will be pushed if I get no objections before 11/26/25. So please shout if anyone has objections. Also note that after the patch there's a diff of the upstream commit vs the patch applied to the branch. This will indicate if there was any rebasing needed to apply to the stable branch. If there were code changes for rebasing (ie: not only metadata diffs), please double check that the rebase was correctly done. Queued patches are on a temporary branch at: https://github.com/kevintraynor/dpdk-stable This queued commit can be viewed at: https://github.com/kevintraynor/dpdk-stable/commit/a11c55a94f641b8eb25c92e57ba69079ef11b56e Thanks. Kevin --- >From a11c55a94f641b8eb25c92e57ba69079ef11b56e Mon Sep 17 00:00:00 2001 From: Jiawen Wu Date: Mon, 27 Oct 2025 11:15:24 +0800 Subject: [PATCH] net/txgbe: fix checksum error counter [ upstream commit b9ad8a6e728aff2c6628f07d41d54f6ca89b936b ] Count the rx_l3_l4_xsum_error statistic in Rx path. Since this hardware register counter is missing, resulted in the count always showing as 0 in error. Fixes: 91fe49c87d76 ("net/txgbe: support device xstats") Signed-off-by: Jiawen Wu --- drivers/net/txgbe/txgbe_ethdev.c | 17 +++++++++++++++++ drivers/net/txgbe/txgbe_rxtx.c | 12 ++++++++---- drivers/net/txgbe/txgbe_rxtx.h | 1 + drivers/net/txgbe/txgbe_rxtx_vec_neon.c | 9 ++++++++- drivers/net/txgbe/txgbe_rxtx_vec_sse.c | 9 ++++++++- 5 files changed, 42 insertions(+), 6 deletions(-) diff --git a/drivers/net/txgbe/txgbe_ethdev.c b/drivers/net/txgbe/txgbe_ethdev.c index ed4f1c1360..554d41aeee 100644 --- a/drivers/net/txgbe/txgbe_ethdev.c +++ b/drivers/net/txgbe/txgbe_ethdev.c @@ -2603,4 +2603,6 @@ txgbe_dev_xstats_get_(struct rte_eth_dev *dev, uint64_t *values, struct txgbe_hw *hw = TXGBE_DEV_HW(dev); struct txgbe_hw_stats *hw_stats = TXGBE_DEV_STATS(dev); + struct txgbe_rx_queue *rxq; + uint64_t rx_csum_err = 0; unsigned int i, count; @@ -2616,4 +2618,11 @@ txgbe_dev_xstats_get_(struct rte_eth_dev *dev, uint64_t *values, limit = min(limit, txgbe_xstats_calc_num(dev)); + /* Rx Checksum Errors */ + for (i = 0; i < dev->data->nb_rx_queues; i++) { + rxq = dev->data->rx_queues[i]; + rx_csum_err += rxq->csum_err; + } + hw_stats->rx_l3_l4_xsum_error = rx_csum_err; + /* Extended stats from txgbe_hw_stats */ for (i = 0; i < limit; i++) { @@ -2658,4 +2667,6 @@ txgbe_dev_xstats_reset(struct rte_eth_dev *dev) struct txgbe_hw *hw = TXGBE_DEV_HW(dev); struct txgbe_hw_stats *hw_stats = TXGBE_DEV_STATS(dev); + struct txgbe_rx_queue *rxq; + int i = 0; /* HW registers are cleared on read */ @@ -2667,4 +2678,10 @@ txgbe_dev_xstats_reset(struct rte_eth_dev *dev) memset(hw_stats, 0, sizeof(*hw_stats)); + /* Reset rxq checksum errors */ + for (i = 0; i < dev->data->nb_rx_queues; i++) { + rxq = dev->data->rx_queues[i]; + rxq->csum_err = 0; + } + return 0; } diff --git a/drivers/net/txgbe/txgbe_rxtx.c b/drivers/net/txgbe/txgbe_rxtx.c index 46e73a89cb..2f4690ec61 100644 --- a/drivers/net/txgbe/txgbe_rxtx.c +++ b/drivers/net/txgbe/txgbe_rxtx.c @@ -1278,5 +1278,5 @@ rx_desc_status_to_pkt_flags(uint32_t rx_status, uint64_t vlan_flags) static inline uint64_t -rx_desc_error_to_pkt_flags(uint32_t rx_status) +rx_desc_error_to_pkt_flags(uint32_t rx_status, struct txgbe_rx_queue *rxq) { uint64_t pkt_flags = 0; @@ -1286,4 +1286,5 @@ rx_desc_error_to_pkt_flags(uint32_t rx_status) pkt_flags |= (rx_status & TXGBE_RXD_ERR_IPCS ? RTE_MBUF_F_RX_IP_CKSUM_BAD : RTE_MBUF_F_RX_IP_CKSUM_GOOD); + rxq->csum_err += !!(rx_status & TXGBE_RXD_ERR_IPCS); } @@ -1291,4 +1292,5 @@ rx_desc_error_to_pkt_flags(uint32_t rx_status) pkt_flags |= (rx_status & TXGBE_RXD_ERR_L4CS ? RTE_MBUF_F_RX_L4_CKSUM_BAD : RTE_MBUF_F_RX_L4_CKSUM_GOOD); + rxq->csum_err += !!(rx_status & TXGBE_RXD_ERR_L4CS); } @@ -1296,4 +1298,5 @@ rx_desc_error_to_pkt_flags(uint32_t rx_status) rx_status & TXGBE_RXD_ERR_EIPCS) { pkt_flags |= RTE_MBUF_F_RX_OUTER_IP_CKSUM_BAD; + rxq->csum_err += !!(rx_status & TXGBE_RXD_ERR_EIPCS); } @@ -1377,5 +1380,5 @@ txgbe_rx_scan_hw_ring(struct txgbe_rx_queue *rxq) pkt_flags = rx_desc_status_to_pkt_flags(s[j], rxq->vlan_flags); - pkt_flags |= rx_desc_error_to_pkt_flags(s[j]); + pkt_flags |= rx_desc_error_to_pkt_flags(s[j], rxq); pkt_flags |= txgbe_rxd_pkt_info_to_pkt_flags(pkt_info[j]); @@ -1716,5 +1719,5 @@ txgbe_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts, pkt_flags = rx_desc_status_to_pkt_flags(staterr, rxq->vlan_flags); - pkt_flags |= rx_desc_error_to_pkt_flags(staterr); + pkt_flags |= rx_desc_error_to_pkt_flags(staterr, rxq); pkt_flags |= txgbe_rxd_pkt_info_to_pkt_flags(pkt_info); rxm->ol_flags = pkt_flags; @@ -1792,5 +1795,5 @@ txgbe_fill_cluster_head_buf(struct rte_mbuf *head, struct txgbe_rx_desc *desc, pkt_info = rte_le_to_cpu_32(desc->qw0.dw0); pkt_flags = rx_desc_status_to_pkt_flags(staterr, rxq->vlan_flags); - pkt_flags |= rx_desc_error_to_pkt_flags(staterr); + pkt_flags |= rx_desc_error_to_pkt_flags(staterr, rxq); pkt_flags |= txgbe_rxd_pkt_info_to_pkt_flags(pkt_info); if (TXGBE_RXD_RSCCNT(desc->qw0.dw0)) @@ -2697,4 +2700,5 @@ txgbe_reset_rx_queue(struct txgbe_adapter *adapter, struct txgbe_rx_queue *rxq) rxq->rx_tail = 0; rxq->nb_rx_hold = 0; + rxq->csum_err = 0; rte_pktmbuf_free(rxq->pkt_first_seg); rxq->pkt_first_seg = NULL; diff --git a/drivers/net/txgbe/txgbe_rxtx.h b/drivers/net/txgbe/txgbe_rxtx.h index 622a0d3981..f90db9dde7 100644 --- a/drivers/net/txgbe/txgbe_rxtx.h +++ b/drivers/net/txgbe/txgbe_rxtx.h @@ -324,4 +324,5 @@ struct txgbe_rx_queue { struct rte_mbuf *rx_stage[RTE_PMD_TXGBE_RX_MAX_BURST * 2]; const struct rte_memzone *mz; + uint64_t csum_err; }; diff --git a/drivers/net/txgbe/txgbe_rxtx_vec_neon.c b/drivers/net/txgbe/txgbe_rxtx_vec_neon.c index d4d647fab5..5c990f5712 100644 --- a/drivers/net/txgbe/txgbe_rxtx_vec_neon.c +++ b/drivers/net/txgbe/txgbe_rxtx_vec_neon.c @@ -223,5 +223,5 @@ _recv_raw_pkts_vec(struct txgbe_rx_queue *rxq, struct rte_mbuf **rx_pkts, struct txgbe_rx_entry *sw_ring; uint16_t nb_pkts_recd; - int pos; + int pos, i; uint8x16_t shuf_msk = { 0xFF, 0xFF, @@ -332,4 +332,11 @@ _recv_raw_pkts_vec(struct txgbe_rx_queue *rxq, struct rte_mbuf **rx_pkts, &rx_pkts[pos]); + for (i = 0; i < RTE_TXGBE_DESCS_PER_LOOP; i++) { + if (rx_pkts[pos + i]->ol_flags & + (RTE_MBUF_F_RX_IP_CKSUM_BAD | + RTE_MBUF_F_RX_L4_CKSUM_BAD)) + rxq->csum_err++; + } + /* D.2 pkt 3,4 set in_port/nb_seg and remove crc */ tmp = vsubq_u16(vreinterpretq_u16_u8(pkt_mb4), crc_adjust); diff --git a/drivers/net/txgbe/txgbe_rxtx_vec_sse.c b/drivers/net/txgbe/txgbe_rxtx_vec_sse.c index 8ecce33471..03c2af43d5 100644 --- a/drivers/net/txgbe/txgbe_rxtx_vec_sse.c +++ b/drivers/net/txgbe/txgbe_rxtx_vec_sse.c @@ -284,5 +284,5 @@ _recv_raw_pkts_vec(struct txgbe_rx_queue *rxq, struct rte_mbuf **rx_pkts, uint8_t use_ipsec = rxq->using_ipsec; #endif - int pos; + int pos, i; uint64_t var; __m128i shuf_msk; @@ -452,4 +452,11 @@ _recv_raw_pkts_vec(struct txgbe_rx_queue *rxq, struct rte_mbuf **rx_pkts, desc_to_olflags_v(descs, mbuf_init, vlan_flags, &rx_pkts[pos]); + for (i = 0; i < RTE_TXGBE_DESCS_PER_LOOP; i++) { + if (rx_pkts[pos + i]->ol_flags & + (RTE_MBUF_F_RX_IP_CKSUM_BAD | + RTE_MBUF_F_RX_L4_CKSUM_BAD)) + rxq->csum_err++; + } + #ifdef RTE_LIB_SECURITY if (unlikely(use_ipsec)) -- 2.51.0 --- Diff of the applied patch vs upstream commit (please double-check if non-empty: --- --- - 2025-11-21 11:05:10.306708552 +0000 +++ 0022-net-txgbe-fix-checksum-error-counter.patch 2025-11-21 11:05:09.399200896 +0000 @@ -1 +1 @@ -From b9ad8a6e728aff2c6628f07d41d54f6ca89b936b Mon Sep 17 00:00:00 2001 +From a11c55a94f641b8eb25c92e57ba69079ef11b56e Mon Sep 17 00:00:00 2001 @@ -5,0 +6,2 @@ +[ upstream commit b9ad8a6e728aff2c6628f07d41d54f6ca89b936b ] + @@ -11 +12,0 @@ -Cc: stable@dpdk.org @@ -23 +24 @@ -index 7b040b08c5..cbb2ea815f 100644 +index ed4f1c1360..554d41aeee 100644 @@ -26 +27 @@ -@@ -2667,4 +2667,6 @@ txgbe_dev_xstats_get(struct rte_eth_dev *dev, struct rte_eth_xstat *xstats, +@@ -2603,4 +2603,6 @@ txgbe_dev_xstats_get_(struct rte_eth_dev *dev, uint64_t *values, @@ -33 +34 @@ -@@ -2680,4 +2682,11 @@ txgbe_dev_xstats_get(struct rte_eth_dev *dev, struct rte_eth_xstat *xstats, +@@ -2616,4 +2618,11 @@ txgbe_dev_xstats_get_(struct rte_eth_dev *dev, uint64_t *values, @@ -45 +46 @@ -@@ -2756,4 +2765,6 @@ txgbe_dev_xstats_reset(struct rte_eth_dev *dev) +@@ -2658,4 +2667,6 @@ txgbe_dev_xstats_reset(struct rte_eth_dev *dev) @@ -52 +53 @@ -@@ -2765,4 +2776,10 @@ txgbe_dev_xstats_reset(struct rte_eth_dev *dev) +@@ -2667,4 +2678,10 @@ txgbe_dev_xstats_reset(struct rte_eth_dev *dev) @@ -64 +65 @@ -index 167bda8019..c606180741 100644 +index 46e73a89cb..2f4690ec61 100644 @@ -67 +68 @@ -@@ -1291,5 +1291,5 @@ rx_desc_status_to_pkt_flags(uint32_t rx_status, uint64_t vlan_flags) +@@ -1278,5 +1278,5 @@ rx_desc_status_to_pkt_flags(uint32_t rx_status, uint64_t vlan_flags) @@ -74 +75 @@ -@@ -1299,4 +1299,5 @@ rx_desc_error_to_pkt_flags(uint32_t rx_status) +@@ -1286,4 +1286,5 @@ rx_desc_error_to_pkt_flags(uint32_t rx_status) @@ -80 +81 @@ -@@ -1304,4 +1305,5 @@ rx_desc_error_to_pkt_flags(uint32_t rx_status) +@@ -1291,4 +1292,5 @@ rx_desc_error_to_pkt_flags(uint32_t rx_status) @@ -86 +87 @@ -@@ -1309,4 +1311,5 @@ rx_desc_error_to_pkt_flags(uint32_t rx_status) +@@ -1296,4 +1298,5 @@ rx_desc_error_to_pkt_flags(uint32_t rx_status) @@ -92 +93 @@ -@@ -1390,5 +1393,5 @@ txgbe_rx_scan_hw_ring(struct txgbe_rx_queue *rxq) +@@ -1377,5 +1380,5 @@ txgbe_rx_scan_hw_ring(struct txgbe_rx_queue *rxq) @@ -99 +100 @@ -@@ -1729,5 +1732,5 @@ txgbe_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts, +@@ -1716,5 +1719,5 @@ txgbe_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts, @@ -106 +107 @@ -@@ -1805,5 +1808,5 @@ txgbe_fill_cluster_head_buf(struct rte_mbuf *head, struct txgbe_rx_desc *desc, +@@ -1792,5 +1795,5 @@ txgbe_fill_cluster_head_buf(struct rte_mbuf *head, struct txgbe_rx_desc *desc, @@ -113 +114 @@ -@@ -2754,4 +2757,5 @@ txgbe_reset_rx_queue(struct txgbe_adapter *adapter, struct txgbe_rx_queue *rxq) +@@ -2697,4 +2700,5 @@ txgbe_reset_rx_queue(struct txgbe_adapter *adapter, struct txgbe_rx_queue *rxq) @@ -120 +121 @@ -index b1ac03576f..02e2617cce 100644 +index 622a0d3981..f90db9dde7 100644 @@ -130 +131 @@ -index a56e2f4164..c408a65036 100644 +index d4d647fab5..5c990f5712 100644