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 B0C2B47138 for ; Tue, 30 Dec 2025 08:40:06 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id AB07F40267; Tue, 30 Dec 2025 08:40:06 +0100 (CET) Received: from smtpbgeu1.qq.com (smtpbgeu1.qq.com [52.59.177.22]) by mails.dpdk.org (Postfix) with ESMTP id 61BB640267 for ; Tue, 30 Dec 2025 08:40:03 +0100 (CET) X-QQ-mid: zesmtpsz7t1767080398t6a6a9b8e X-QQ-Originating-IP: +AN/VJcmGxPSfq89v9MaOKdvjx6HlubLu1JywHOfqMs= Received: from w-MS-7E16.trustnetic.com ( [115.198.217.26]) by bizesmtp.qq.com (ESMTP) with id ; Tue, 30 Dec 2025 15:39:58 +0800 (CST) X-QQ-SSF: 0000000000000000000000000000000 X-QQ-GoodBg: 0 X-BIZMAIL-ID: 15290209564132093855 EX-QQ-RecipientCnt: 2 From: Jiawen Wu To: stable@dpdk.org Cc: Jiawen Wu Subject: [PATCH 23.11 2/2] net/txgbe: fix checksum error counter Date: Tue, 30 Dec 2025 15:39:42 +0800 Message-ID: <0F9FED3EADF4C78C+20251230073942.51877-2-jiawenwu@trustnetic.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20251230073942.51877-1-jiawenwu@trustnetic.com> References: <20251230073942.51877-1-jiawenwu@trustnetic.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-QQ-SENDSIZE: 520 Feedback-ID: zesmtpsz:trustnetic.com:qybglogicsvrgz:qybglogicsvrgz6b-0 X-QQ-XMAILINFO: MBlb9jzPUvXQeR83DVcIM90tnr9kZrsPUshmQ800bgiIaxfSKdOZZUg8 mCvMi00UbjAGOJ6wFi8e2uFy1PstzNbatYggoaAiY5xKKGl6+YjunpvK86mey3r0705l1Ea mOgxu13Arf0N3m2DBhkVYBo1AMQVlN0hTJUpcZ+FAgFZ5qzbU+fsqtDmyB5WZEVZwx+TovG cystaIq0b6D97KBEtT+e/aHHFPnIuSgbjgTyHmAt84nr23pkTm1MPlVWY2iPHm20kg0txBH 8svIdpLImsjKLZs7rM3Jir/5eN2fXkGH+k7Mahc4kxiN+OEbpevv1I9thiVG/1eZrh27Aw1 NtLaBB4f8qoF/dKFcq6/Wq5dTbPndCq/By7rVH4ezMxaz6Klqmo/6+qO5OR4PF9jDS8BuRH JSVHmM+bza5/Ecl9a8in+da1pPq1UIRRUHD1RWvqVrGCITy5Yw2+uHuxjjBQIkxjkovSZbB oVcJwbEyeQxW+9g52aK/zWxh7UgW3e9gnuULPFs9n4OuITUX1HNau2TrSSaYd3CI2baNBFj qcHjUlMrEKOmpZjUgEeVh9Cdq97wwYe1Vvxko7w6Azk+/CInj4+/UUQJwZlzxBtFFLrcN+U AVS3Qol8PI+ZVu3Ro53bJapbeiKbh3nvNiH1Gjy9VVzJR3ogdWIwjjbi7n2gbqPc4yFExLy lHtbmszjeHIwFsRLCle2qTS9mcJiAbj3ueCFtfAaelQqYtok2UHFhjKDcbxJYdGMXl0Dv7s lasnfjmjte48d7OsmsQ20OWNWJJVuazF6LSFdWkji+RUJMIc5BBK3wGaCnNDDd+AilM2bML /qvuybCQLCTr+M2I/izSXb9QSbury/VyQ+kYyg9fAsrrfXozwe/V+l8nAEel0iztfkO/B4Z bpeDWMCxG7j/G9knqeVr46/j6l0OORE2ZdXdbTCEzD1yrQnXKBLraMQxdiFhe7P6/gu9q5B a3UXV4hEEVGJRGyF8pJpj4bgJyPZryrADGplDcUWApjE+KjnlExuIMWeA10mSM4+EP7skiu 1ffnGf9qalvPq5TlWr6vViZvlwBjcsGPUUNQeK/xoiaD1WqNyqpivV4CwMtKVcfG56+xVRv 7e6j1Uw/U3q X-QQ-XMRINFO: OWPUhxQsoeAVwkVaQIEGSKwwgKCxK/fD5g== 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 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 + 3 files changed, 26 insertions(+), 4 deletions(-) diff --git a/drivers/net/txgbe/txgbe_ethdev.c b/drivers/net/txgbe/txgbe_ethdev.c index b20897cc9f..2e6abae962 100644 --- a/drivers/net/txgbe/txgbe_ethdev.c +++ b/drivers/net/txgbe/txgbe_ethdev.c @@ -2582,6 +2582,13 @@ txgbe_dev_xstats_get(struct rte_eth_dev *dev, struct rte_eth_xstat *xstats, 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++) { uint32_t offset = 0; @@ -2603,6 +2610,8 @@ 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; txgbe_read_stats_registers(hw, hw_stats); @@ -2658,6 +2667,8 @@ 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 */ hw->offset_loaded = 0; @@ -2667,6 +2678,12 @@ txgbe_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/txgbe/txgbe_rxtx.c b/drivers/net/txgbe/txgbe_rxtx.c index 11df2eeafa..1f61eb3572 100644 --- a/drivers/net/txgbe/txgbe_rxtx.c +++ b/drivers/net/txgbe/txgbe_rxtx.c @@ -1156,7 +1156,7 @@ 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; @@ -1164,16 +1164,19 @@ rx_desc_error_to_pkt_flags(uint32_t rx_status) if (rx_status & TXGBE_RXD_STAT_IPCS) { 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); } if (rx_status & TXGBE_RXD_STAT_L4CS) { 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); } if (rx_status & TXGBE_RXD_STAT_EIPCS && 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); } #ifdef RTE_LIB_SECURITY @@ -1255,7 +1258,7 @@ txgbe_rx_scan_hw_ring(struct txgbe_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 |= txgbe_rxd_pkt_info_to_pkt_flags(pkt_info[j]); mb->ol_flags = pkt_flags; @@ -1594,7 +1597,7 @@ 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; rxm->packet_type = txgbe_rxd_pkt_info_to_pkt_type(pkt_info, @@ -1670,7 +1673,7 @@ txgbe_fill_cluster_head_buf(struct rte_mbuf *head, struct txgbe_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 |= txgbe_rxd_pkt_info_to_pkt_flags(pkt_info); if (TXGBE_RXD_RSCCNT(desc->qw0.dw0)) pkt_flags |= RTE_MBUF_F_RX_LRO; @@ -2556,6 +2559,7 @@ txgbe_reset_rx_queue(struct txgbe_adapter *adapter, struct txgbe_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/txgbe/txgbe_rxtx.h b/drivers/net/txgbe/txgbe_rxtx.h index c579e1a9f2..1d5eb1fdc7 100644 --- a/drivers/net/txgbe/txgbe_rxtx.h +++ b/drivers/net/txgbe/txgbe_rxtx.h @@ -315,6 +315,7 @@ struct txgbe_rx_queue { /** hold packets to return to application */ struct rte_mbuf *rx_stage[RTE_PMD_TXGBE_RX_MAX_BURST * 2]; const struct rte_memzone *mz; + uint64_t csum_err; }; /** -- 2.48.1