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 AAE4947138 for ; Tue, 30 Dec 2025 08:40:04 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 908C5402A0; Tue, 30 Dec 2025 08:40:04 +0100 (CET) Received: from smtpbg151.qq.com (smtpbg151.qq.com [18.169.211.239]) by mails.dpdk.org (Postfix) with ESMTP id 212A640267 for ; Tue, 30 Dec 2025 08:40:01 +0100 (CET) X-QQ-mid: zesmtpsz7t1767080397t5d0ffb24 X-QQ-Originating-IP: z+5KrIsZaULjSOHWalx4zaRfiVqu1iWbxe8+XiX+9hw= Received: from w-MS-7E16.trustnetic.com ( [115.198.217.26]) by bizesmtp.qq.com (ESMTP) with id ; Tue, 30 Dec 2025 15:39:51 +0800 (CST) X-QQ-SSF: 0000000000000000000000000000000 X-QQ-GoodBg: 0 X-BIZMAIL-ID: 11621852779965281110 EX-QQ-RecipientCnt: 2 From: Jiawen Wu To: stable@dpdk.org Cc: Jiawen Wu Subject: [PATCH 23.11 1/2] net/ngbe: fix checksum error counter Date: Tue, 30 Dec 2025 15:39:41 +0800 Message-ID: <012B25A0E9641AD3+20251230073942.51877-1-jiawenwu@trustnetic.com> X-Mailer: git-send-email 2.48.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-QQ-SENDSIZE: 520 Feedback-ID: zesmtpsz:trustnetic.com:qybglogicsvrgz:qybglogicsvrgz6b-0 X-QQ-XMAILINFO: OW3qjH3bC/TAQYU28MZ5fj4uWVsOHdTrkdgXptCnIkxQbWihuyt6fhYc PokKh9efDHknj4yTFWYcefUkqd+24YSr9dENvWYza3sl7jeHPfeLyvenYdoZaPEc2w5HIIZ vUOOqYyuH7vrB5cHt+4TXOQL1xrlZkgn6FryE3rbBz3xudV4T5wuodKrczF/RWHwGWJvaIM QjnIxK6efa8d6JWhYNgdiftJQ9gyeos+tXKL6Z3325VOBagsF1wvHchgLXRa8S/TgH/r+au 65OJKPgSBO3kupRMTAR2EFdR856evrYJyPtkxMOmj6bjUdVewJcuuYynVneUhVgQ3KqAm3/ +pney3tFdVXi2yjZ5GLsjgFXO8bX0hrI4zXRfl/nRWtTqKOlshq38Z3iK8UiuZlkLOXQP02 DmZEE4dQB86JCAiyli5PaO6HjdMgRWDc73n6DE0bzk0ilYURhq/cPDXi/0UE2Zw3mLC3fOb KTgAL+uImFXQtsRiHPl8+QmOi0xqUsuN3f7Zth7NeDsDDkE4OtteXG1jFZpYe9iOiZyWvwc Ed9CiWt9EWZsCvmAN4Bb6ftPef3GnXStgbmKcfXoatdXiqqi9reQsWSM3LofKkt7DGBBMs4 26BPKYszVgJxsFSjcHwLzht6y7CFBqwXYcolIXuhNj9/8FRsv4RIIP2Tesyd4IVIVfZRgu9 CIbDJEAGm0buCKcR11nPrfJsbXaT9CvAkBAqI5atjRvUEp9EXejQXiCXS7dTl5jdNF8mTjw 3Eh9UwgVaqGbR7neXMabWiYi3EQXW4ZS5udr8FNNQ4bop49Zx6mu5aMzxBJLe7mq5KsNIC7 CIwfMkaH9yTgSTbiIbWiTWMwFnDTfQcfIsAJBMvVxoJphL+0nTESFsYPrLPjRQkTwkWc7fH 9lrUuwqQEnSZHeV5Envowg+69i2zRN6QZOjdnPeJKeT4R/T1dvuDk4PsrBHs9rc0Q9zyLzQ zSWugU6xuilbK9i1D9DaxFLDaL4JcBYJ63Ump4MJ9ILQXPiBmdM5Y6X2rWv8LVyKy9IrMPJ d6w4bhPdDTB7MwHpByyLKkNTzvC3o= X-QQ-XMRINFO: Mp0Kj//9VHAxzExpfF+O8yhSrljjwrznVg== X-QQ-RECHKSPAM: 0 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 [ 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 + 3 files changed, 32 insertions(+), 7 deletions(-) diff --git a/drivers/net/ngbe/ngbe_ethdev.c b/drivers/net/ngbe/ngbe_ethdev.c index bce63d26b5..8b086d3d1f 100644 --- a/drivers/net/ngbe/ngbe_ethdev.c +++ b/drivers/net/ngbe/ngbe_ethdev.c @@ -1693,6 +1693,13 @@ 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++) { uint32_t offset = 0; @@ -1714,6 +1721,8 @@ ngbe_dev_xstats_get_(struct rte_eth_dev *dev, uint64_t *values, { 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; ngbe_read_stats_registers(hw, hw_stats); @@ -1769,6 +1778,8 @@ 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 */ hw->offset_loaded = 0; @@ -1778,6 +1789,12 @@ ngbe_dev_xstats_reset(struct rte_eth_dev *dev) /* Reset software totals */ 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 c5db14a86e..5840111d9f 100644 --- a/drivers/net/ngbe/ngbe_rxtx.c +++ b/drivers/net/ngbe/ngbe_rxtx.c @@ -916,22 +916,28 @@ 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; } @@ -1004,7 +1010,7 @@ ngbe_rx_scan_hw_ring(struct ngbe_rx_queue *rxq) /* convert descriptor fields to rte mbuf flags */ 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]); mb->ol_flags = pkt_flags; @@ -1337,7 +1343,7 @@ 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; rxm->packet_type = ngbe_rxd_pkt_info_to_pkt_type(pkt_info, @@ -1408,7 +1414,7 @@ ngbe_fill_cluster_head_buf(struct rte_mbuf *head, struct ngbe_rx_desc *desc, head->vlan_tci = rte_le_to_cpu_16(desc->qw1.hi.tag); 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; head->packet_type = ngbe_rxd_pkt_info_to_pkt_type(pkt_info, @@ -2186,6 +2192,7 @@ ngbe_reset_rx_queue(struct ngbe_adapter *adapter, struct ngbe_rx_queue *rxq) rxq->rx_free_trigger = (uint16_t)(rxq->rx_free_thresh - 1); 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; rxq->pkt_last_seg = NULL; diff --git a/drivers/net/ngbe/ngbe_rxtx.h b/drivers/net/ngbe/ngbe_rxtx.h index 2914b9a756..c472637f90 100644 --- a/drivers/net/ngbe/ngbe_rxtx.h +++ b/drivers/net/ngbe/ngbe_rxtx.h @@ -277,6 +277,7 @@ struct ngbe_rx_queue { /** hold packets to return to application */ struct rte_mbuf *rx_stage[RTE_PMD_NGBE_RX_MAX_BURST * 2]; const struct rte_memzone *mz; + uint64_t csum_err; }; /** -- 2.48.1