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 BABE64402A; Tue, 14 May 2024 10:43:18 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id BFFE84069D; Tue, 14 May 2024 10:43:08 +0200 (CEST) Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.16]) by mails.dpdk.org (Postfix) with ESMTP id 9EB524067A; Tue, 14 May 2024 10:43:06 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1715676187; x=1747212187; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=fQdEXS6O10HbH4m1MBXY4RiFaxFsrBZ+Rv6KhP9rvQU=; b=ltUCOi61u9OVhNaP64lh/zkqeImt5vd5hM6b2nWZIZsSXn+VKEIY0fkD tCanZmqUiaVxv8pqtHD4bclmDuqN71KIS0HbU00YTImeaQEdieAOKvDqK rFEBtgA7sbfkAyux4Kh2Rj+9zSBqFMpIndswTELj+Mtnvs7j7fUmiqGuk 5gj99Z1JiizuF+YcRkXWeXUqlCDgnThDAIRBZVjpN3s6bF44TTFQtn1n1 RCevCG/K1qaR0cqAqixdIg6cIPCUjl/6JZxP3X5gF3MZZ+V71nGBtZYCR m6R9PYu59+sEX1I+QyrWt8TNQ7JUzXkG4Ehovo5EJ0+bErx+U2EEIDS5+ Q==; X-CSE-ConnectionGUID: 7nojnefdQfS+LRLngqEvHg== X-CSE-MsgGUID: mS+7Axw8SRGAT0mkNls/Iw== X-IronPort-AV: E=McAfee;i="6600,9927,11072"; a="11513816" X-IronPort-AV: E=Sophos;i="6.08,159,1712646000"; d="scan'208";a="11513816" Received: from fmviesa006.fm.intel.com ([10.60.135.146]) by fmvoesa110.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 14 May 2024 01:43:06 -0700 X-CSE-ConnectionGUID: HQ9p5FXrReGNdEIwKorQfg== X-CSE-MsgGUID: iJIc2F/WRxmdTxHwLfHNSg== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.08,159,1712646000"; d="scan'208";a="30657439" Received: from silpixa00401177.ir.intel.com (HELO vm177..) ([10.55.128.139]) by fmviesa006.fm.intel.com with ESMTP; 14 May 2024 01:43:04 -0700 From: Ciara Loftus To: dev@dpdk.org Cc: Ciara Loftus , stable@dpdk.org, Stephen Hemminger , Maryam Tahhan Subject: [PATCH v2 3/4] net/af_xdp: fix stats reset Date: Tue, 14 May 2024 08:41:54 +0000 Message-Id: <20240514084155.50673-4-ciara.loftus@intel.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240514084155.50673-1-ciara.loftus@intel.com> References: <20240514084155.50673-1-ciara.loftus@intel.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org The imissed statistic was not properly reset because it was read directly from the kernel statistics. To fix this, take note of the kernel statistic when the stats are reset and deduct this value from the kernel statistic read during statistics get. Bugzilla ID: 1430 Fixes: f1debd77efaf ("net/af_xdp: introduce AF_XDP PMD") cc: stable@dpdk.org Reported-by: Stephen Hemminger Signed-off-by: Ciara Loftus Acked-by: Maryam Tahhan --- v2: * Removed whitespace in rx_stats struct * Fixed typo in commit message drivers/net/af_xdp/rte_eth_af_xdp.c | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/drivers/net/af_xdp/rte_eth_af_xdp.c b/drivers/net/af_xdp/rte_eth_af_xdp.c index 9bcf971ae5..193e3576bc 100644 --- a/drivers/net/af_xdp/rte_eth_af_xdp.c +++ b/drivers/net/af_xdp/rte_eth_af_xdp.c @@ -124,6 +124,7 @@ struct rx_stats { uint64_t rx_pkts; uint64_t rx_bytes; uint64_t rx_dropped; + uint64_t imissed_offset; }; struct pkt_rx_queue { @@ -884,7 +885,8 @@ eth_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats) AF_XDP_LOG(ERR, "getsockopt() failed for XDP_STATISTICS.\n"); return -1; } - stats->imissed += xdp_stats.rx_dropped; + stats->imissed += + (xdp_stats.rx_dropped - internals->rx_queues[i].stats.imissed_offset); stats->opackets += stats->q_opackets[i]; stats->obytes += stats->q_obytes[i]; @@ -897,13 +899,25 @@ static int eth_stats_reset(struct rte_eth_dev *dev) { struct pmd_internals *internals = dev->data->dev_private; - int i; + struct pmd_process_private *process_private = dev->process_private; + struct xdp_statistics xdp_stats; + socklen_t optlen; + int i, ret, fd; for (i = 0; i < internals->queue_cnt; i++) { memset(&internals->rx_queues[i].stats, 0, sizeof(struct rx_stats)); memset(&internals->tx_queues[i].stats, 0, sizeof(struct tx_stats)); + fd = process_private->rxq_xsk_fds[i]; + optlen = sizeof(struct xdp_statistics); + ret = fd >= 0 ? getsockopt(fd, SOL_XDP, XDP_STATISTICS, + &xdp_stats, &optlen) : -1; + if (ret != 0) { + AF_XDP_LOG(ERR, "getsockopt() failed for XDP_STATISTICS.\n"); + return -1; + } + internals->rx_queues[i].stats.imissed_offset = xdp_stats.rx_dropped; } return 0; -- 2.34.1