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 A609E43FEF; Fri, 10 May 2024 12:04:34 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 8BD9A402F1; Fri, 10 May 2024 12:04:34 +0200 (CEST) Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.13]) by mails.dpdk.org (Postfix) with ESMTP id 924EE40608 for ; Fri, 10 May 2024 12:04:32 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1715335472; x=1746871472; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=zIvAizuWicm9DW9PVQdrTzQviVrFM+caNzUHrijUZJk=; b=djMWOwEaDhrFjgoLSkoAIwkekRkiNPCwWguKN1Pfu0qgZeNjdQW+YOiU ufUTJqirjTFHzmGEg2GZb3yGX4rffYXuo/HgnSLzF6NYFbkD+UOitNSLh Z4WTmSY9Ot050acSZCJstE0vKTDYpbQduwKlMbWw3rc1oOJAYKjrAoP/v 89mVoqFUcoEpyOp2qJDGCSbV2xcRTdXkSUpkq3P1WA0++F8pmcFtNkzs7 lN820oXFKlMNUT1kjd5W+k81pHJssjETEEWh/9gJLHchBLWgevfnJMJ7Y wq1MLFTVZreTYFcv39j8b1mIGT+5H4Uh1UFMUdZoW734V1NzEENRB3dNK A==; X-CSE-ConnectionGUID: sUPoXWBST0G00X3TpV205A== X-CSE-MsgGUID: kaVSzxWjQdCiL5X4hIIePA== X-IronPort-AV: E=McAfee;i="6600,9927,11068"; a="22460648" X-IronPort-AV: E=Sophos;i="6.08,150,1712646000"; d="scan'208";a="22460648" Received: from orviesa009.jf.intel.com ([10.64.159.149]) by orvoesa105.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 10 May 2024 03:04:31 -0700 X-CSE-ConnectionGUID: Zd1cecv/TLepY/tnW0GILQ== X-CSE-MsgGUID: O5Zgy4WVShu/zJlXXDlZgg== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.08,150,1712646000"; d="scan'208";a="29672609" Received: from silpixa00401177.ir.intel.com (HELO vm177..) ([10.55.128.139]) by orviesa009.jf.intel.com with ESMTP; 10 May 2024 03:04:31 -0700 From: Ciara Loftus To: dev@dpdk.org Cc: stephen@networkplumber.org, Ciara Loftus , stable@dpdk.og Subject: [PATCH 3/3] net/af_xdp: Fix stats reset Date: Fri, 10 May 2024 10:03:58 +0000 Message-Id: <20240510100358.18815-3-ciara.loftus@intel.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240510100358.18815-1-ciara.loftus@intel.com> References: <20240510100358.18815-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.og Reported-by: Stephen Hemminger Signed-off-by: Ciara Loftus --- drivers/net/af_xdp/rte_eth_af_xdp.c | 19 +++++++++++++++++-- 1 file changed, 17 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 968bbf6d45..8f25134003 100644 --- a/drivers/net/af_xdp/rte_eth_af_xdp.c +++ b/drivers/net/af_xdp/rte_eth_af_xdp.c @@ -125,6 +125,8 @@ struct rx_stats { uint64_t rx_bytes; uint64_t rx_dropped; uint64_t alloc_failed; + + uint64_t imissed_offset; }; struct pkt_rx_queue { @@ -884,7 +886,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 +900,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