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 2A02C48B69 for ; Fri, 21 Nov 2025 12:22:43 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 24D3E4026F; Fri, 21 Nov 2025 12:22:43 +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 3CCD2402E0 for ; Fri, 21 Nov 2025 12:22:41 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1763724160; 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=brelRxH6POS8tgBHCJlx8P+DyZFxFVipynwbk9Ij+0c=; b=F/FGhC57xpmBDAwzcveywrztJdIdftukM2JhbqGVXzlR8YQ5VxQKe5mtDro4J3sMvPNuy/ oOYj2c1S+TKEydwsyiwo3+vPCNDHnhrLqoep2su8NiuzIrByAUUPSoc8e+mdfASsNpkQFN OMteEKp0J/P9I1SiPYKAzUFdTEZXqNk= Received: from mx-prod-mc-01.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-408-sPZC7OeAMWONlmEBkovCoA-1; Fri, 21 Nov 2025 06:22:39 -0500 X-MC-Unique: sPZC7OeAMWONlmEBkovCoA-1 X-Mimecast-MFC-AGG-ID: sPZC7OeAMWONlmEBkovCoA_1763724158 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-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 4A55819541AD; Fri, 21 Nov 2025 11:22:38 +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 0240530044DB; Fri, 21 Nov 2025 11:22:36 +0000 (UTC) From: Kevin Traynor To: Jiawen Wu Cc: dpdk stable Subject: patch 'net/ngbe: fix checksum error counter' has been queued to stable release 24.11.4 Date: Fri, 21 Nov 2025 11:20:07 +0000 Message-ID: <20251121112128.485623-23-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: -MIT9k-ZAYcyCtlNElrokbfrNDNY68_yY5cOWUNKhyU_1763724158 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/f9110ac3ce6716308bea981d6933095164adf472 Thanks. Kevin --- >From f9110ac3ce6716308bea981d6933095164adf472 Mon Sep 17 00:00:00 2001 From: Jiawen Wu Date: Mon, 27 Oct 2025 11:15:25 +0800 Subject: [PATCH] net/ngbe: fix checksum error counter [ upstream commit 6280a306079840301b2cd4eee472142964c2e9f6 ] 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: 8b433d04adc9 ("net/ngbe: support device xstats") Signed-off-by: Jiawen Wu --- drivers/net/ngbe/ngbe_ethdev.c | 17 +++++++++++++++++ drivers/net/ngbe/ngbe_rxtx.c | 21 ++++++++++++++------- drivers/net/ngbe/ngbe_rxtx.h | 1 + drivers/net/ngbe/ngbe_rxtx_vec_neon.c | 9 ++++++++- drivers/net/ngbe/ngbe_rxtx_vec_sse.c | 9 ++++++++- 5 files changed, 48 insertions(+), 9 deletions(-) diff --git a/drivers/net/ngbe/ngbe_ethdev.c b/drivers/net/ngbe/ngbe_ethdev.c index d3ac40299f..65143f8fe2 100644 --- a/drivers/net/ngbe/ngbe_ethdev.c +++ b/drivers/net/ngbe/ngbe_ethdev.c @@ -1702,4 +1702,6 @@ ngbe_dev_xstats_get(struct rte_eth_dev *dev, struct rte_eth_xstat *xstats, struct ngbe_hw *hw = ngbe_dev_hw(dev); struct ngbe_hw_stats *hw_stats = NGBE_DEV_STATS(dev); + struct ngbe_rx_queue *rxq; + uint64_t rx_csum_err = 0; unsigned int i, count; @@ -1715,4 +1717,11 @@ ngbe_dev_xstats_get(struct rte_eth_dev *dev, struct rte_eth_xstat *xstats, limit = min(limit, ngbe_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 ngbe_hw_stats */ for (i = 0; i < limit; i++) { @@ -1791,4 +1800,6 @@ ngbe_dev_xstats_reset(struct rte_eth_dev *dev) struct ngbe_hw *hw = ngbe_dev_hw(dev); struct ngbe_hw_stats *hw_stats = NGBE_DEV_STATS(dev); + struct ngbe_rx_queue *rxq; + int i = 0; /* HW registers are cleared on read */ @@ -1800,4 +1811,10 @@ ngbe_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/ngbe/ngbe_rxtx.c b/drivers/net/ngbe/ngbe_rxtx.c index 8d31d47de9..42cb33dbfe 100644 --- a/drivers/net/ngbe/ngbe_rxtx.c +++ b/drivers/net/ngbe/ngbe_rxtx.c @@ -973,20 +973,26 @@ 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 ngbe_rx_queue *rxq) { uint64_t pkt_flags = 0; /* checksum offload can't be disabled */ - if (rx_status & NGBE_RXD_STAT_IPCS) + if (rx_status & NGBE_RXD_STAT_IPCS) { pkt_flags |= (rx_status & NGBE_RXD_ERR_IPCS ? RTE_MBUF_F_RX_IP_CKSUM_BAD : RTE_MBUF_F_RX_IP_CKSUM_GOOD); + rxq->csum_err += !!(rx_status & NGBE_RXD_ERR_IPCS); + } - if (rx_status & NGBE_RXD_STAT_L4CS) + if (rx_status & NGBE_RXD_STAT_L4CS) { pkt_flags |= (rx_status & NGBE_RXD_ERR_L4CS ? RTE_MBUF_F_RX_L4_CKSUM_BAD : RTE_MBUF_F_RX_L4_CKSUM_GOOD); + rxq->csum_err += !!(rx_status & NGBE_RXD_ERR_L4CS); + } if (rx_status & NGBE_RXD_STAT_EIPCS && - rx_status & NGBE_RXD_ERR_EIPCS) + rx_status & NGBE_RXD_ERR_EIPCS) { pkt_flags |= RTE_MBUF_F_RX_OUTER_IP_CKSUM_BAD; + rxq->csum_err += !!(rx_status & NGBE_RXD_ERR_EIPCS); + } return pkt_flags; @@ -1061,5 +1067,5 @@ ngbe_rx_scan_hw_ring(struct ngbe_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 |= ngbe_rxd_pkt_info_to_pkt_flags(pkt_info[j]); @@ -1394,5 +1400,5 @@ ngbe_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 |= ngbe_rxd_pkt_info_to_pkt_flags(pkt_info); rxm->ol_flags = pkt_flags; @@ -1465,5 +1471,5 @@ ngbe_fill_cluster_head_buf(struct rte_mbuf *head, struct ngbe_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 |= ngbe_rxd_pkt_info_to_pkt_flags(pkt_info); head->ol_flags = pkt_flags; @@ -2267,4 +2273,5 @@ ngbe_reset_rx_queue(struct ngbe_adapter *adapter, struct ngbe_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/ngbe/ngbe_rxtx.h b/drivers/net/ngbe/ngbe_rxtx.h index 8534ec123a..7b96b837ca 100644 --- a/drivers/net/ngbe/ngbe_rxtx.h +++ b/drivers/net/ngbe/ngbe_rxtx.h @@ -293,4 +293,5 @@ struct ngbe_rx_queue { struct rte_mbuf *rx_stage[RTE_PMD_NGBE_RX_MAX_BURST * 2]; const struct rte_memzone *mz; + uint64_t csum_err; }; diff --git a/drivers/net/ngbe/ngbe_rxtx_vec_neon.c b/drivers/net/ngbe/ngbe_rxtx_vec_neon.c index 37075ea5e7..55df0ad3a5 100644 --- a/drivers/net/ngbe/ngbe_rxtx_vec_neon.c +++ b/drivers/net/ngbe/ngbe_rxtx_vec_neon.c @@ -223,5 +223,5 @@ _recv_raw_pkts_vec(struct ngbe_rx_queue *rxq, struct rte_mbuf **rx_pkts, struct ngbe_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 ngbe_rx_queue *rxq, struct rte_mbuf **rx_pkts, &rx_pkts[pos]); + for (i = 0; i < RTE_NGBE_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/ngbe/ngbe_rxtx_vec_sse.c b/drivers/net/ngbe/ngbe_rxtx_vec_sse.c index 19c69cdfa6..474101c600 100644 --- a/drivers/net/ngbe/ngbe_rxtx_vec_sse.c +++ b/drivers/net/ngbe/ngbe_rxtx_vec_sse.c @@ -245,5 +245,5 @@ _recv_raw_pkts_vec(struct ngbe_rx_queue *rxq, struct rte_mbuf **rx_pkts, struct ngbe_rx_entry *sw_ring; uint16_t nb_pkts_recd; - int pos; + int pos, i; uint64_t var; __m128i shuf_msk; @@ -413,4 +413,11 @@ _recv_raw_pkts_vec(struct ngbe_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_NGBE_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 */ pkt_mb4 = _mm_add_epi16(pkt_mb4, crc_adjust); -- 2.51.0 --- Diff of the applied patch vs upstream commit (please double-check if non-empty: --- --- - 2025-11-21 11:05:10.337953232 +0000 +++ 0023-net-ngbe-fix-checksum-error-counter.patch 2025-11-21 11:05:09.404200918 +0000 @@ -1 +1 @@ -From 6280a306079840301b2cd4eee472142964c2e9f6 Mon Sep 17 00:00:00 2001 +From f9110ac3ce6716308bea981d6933095164adf472 Mon Sep 17 00:00:00 2001 @@ -5,0 +6,2 @@ +[ upstream commit 6280a306079840301b2cd4eee472142964c2e9f6 ] + @@ -11 +12,0 @@ -Cc: stable@dpdk.org @@ -23 +24 @@ -index adb7785498..8b9d6371fb 100644 +index d3ac40299f..65143f8fe2 100644 @@ -26 +27 @@ -@@ -1705,4 +1705,6 @@ ngbe_dev_xstats_get(struct rte_eth_dev *dev, struct rte_eth_xstat *xstats, +@@ -1702,4 +1702,6 @@ ngbe_dev_xstats_get(struct rte_eth_dev *dev, struct rte_eth_xstat *xstats, @@ -33 +34 @@ -@@ -1718,4 +1720,11 @@ ngbe_dev_xstats_get(struct rte_eth_dev *dev, struct rte_eth_xstat *xstats, +@@ -1715,4 +1717,11 @@ ngbe_dev_xstats_get(struct rte_eth_dev *dev, struct rte_eth_xstat *xstats, @@ -45 +46 @@ -@@ -1794,4 +1803,6 @@ ngbe_dev_xstats_reset(struct rte_eth_dev *dev) +@@ -1791,4 +1800,6 @@ ngbe_dev_xstats_reset(struct rte_eth_dev *dev) @@ -52 +53 @@ -@@ -1803,4 +1814,10 @@ ngbe_dev_xstats_reset(struct rte_eth_dev *dev) +@@ -1800,4 +1811,10 @@ ngbe_dev_xstats_reset(struct rte_eth_dev *dev) @@ -64 +65 @@ -index 95e2172ee4..a60421293b 100644 +index 8d31d47de9..42cb33dbfe 100644 @@ -136 +137 @@ -index 46391c9400..79685de181 100644 +index 37075ea5e7..55df0ad3a5 100644