From nobody Tue Apr 7 18:48:22 2026 Received: from linux.microsoft.com (linux.microsoft.com [13.77.154.182]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 2E8AC3659EB; Fri, 27 Feb 2026 09:39:19 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=13.77.154.182 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772185160; cv=none; b=PPLfDFdnzJFldJJ+qY5QCG6RY3PlWnWCc26UYyQEtFwRUXYjwWP3+NE+WLYyZ//q6ONgsrumpth2B9+nF/VyAf8IXcDnAI/UOuxr8xVVQW3lsYY5otN1zmshRxZwRtb+xh+lDcwwjJPkNBmhJ/ADEgNEH+JBSrI/WIaMYP3tOAE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772185160; c=relaxed/simple; bh=yz71I/S3RGvFKTDcwXAzrfDEXuaBQRtovTGS4adH3zI=; h=Date:From:To:Subject:Message-ID:MIME-Version:Content-Type: Content-Disposition; b=XIwgXP/q6nar1vq/HXboXdkz/SqiBlzBBRDIthQvVnfu7WZ6DoJRG9pZkdEA4K90PKpiyI+skCMiK5VDzhfCf7wW2ASKxTXmcw1OQiNUatrrn7SfouH1qZdZ1n70vIVL0gwRuNXJXnJpjInS3HF8GMGAHR/rWldI+E9I8RJqqp4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.microsoft.com; spf=pass smtp.mailfrom=linux.microsoft.com; dkim=pass (1024-bit key) header.d=linux.microsoft.com header.i=@linux.microsoft.com header.b=SEiXN4xt; arc=none smtp.client-ip=13.77.154.182 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.microsoft.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.microsoft.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux.microsoft.com header.i=@linux.microsoft.com header.b="SEiXN4xt" Received: by linux.microsoft.com (Postfix, from userid 1204) id D534F20B6F02; Fri, 27 Feb 2026 01:39:18 -0800 (PST) DKIM-Filter: OpenDKIM Filter v2.11.0 linux.microsoft.com D534F20B6F02 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.microsoft.com; s=default; t=1772185158; bh=fgx6Wjns7RaGAYZDVzu9z9eNlmFuuvbMsQaWXWwZwOc=; h=Date:From:To:Subject:From; b=SEiXN4xttaniZpzSQSIzw3D5fcmkZp7z+jMchi/rBxq/7RUO7cPSUQZDycIJYzuzH mIu+JtqKM8B4eUVZqWlOaLWQgDf1Z9zr0jpv6rhpnU4dsZWLw+H7pzLG+NbtExoghh MJJpXZjyDYC39O4gfCgU4ZHwUAlSuWBAwp/4K1/4= Date: Fri, 27 Feb 2026 01:39:18 -0800 From: Dipayaan Roy To: kys@microsoft.com, haiyangz@microsoft.com, wei.liu@kernel.org, decui@microsoft.com, andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, leon@kernel.org, longli@microsoft.com, kotaranov@microsoft.com, horms@kernel.org, shradhagupta@linux.microsoft.com, ssengar@linux.microsoft.com, ernis@linux.microsoft.com, shirazsaleem@microsoft.com, linux-hyperv@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, linux-rdma@vger.kernel.org, dipayanroy@microsoft.com Subject: [PATCH net-next] net: mana: Expose page_pool stats via ethtool Message-ID: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Disposition: inline Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" MANA relies on page_pool for RX buffers, and the buffer refill paths can behave quite differently across architectures and configurations (e.g. base page size, fragment vs full-page usage). This makes it harder to understand and compare RX buffer behavior when investigating performance and memory differences across platforms. Wire up the generic page_pool ethtool stats helpers and report page_pool allocation/recycle statistics via ethtool -S when CONFIG_PAGE_POOL_STATS is enabled. The counters are exposed with the standard "rx_pp_*" names, for example: rx_pp_alloc_fast rx_pp_alloc_slow rx_pp_alloc_slow_ho rx_pp_alloc_empty rx_pp_alloc_refill rx_pp_alloc_waive rx_pp_recycle_cached rx_pp_recycle_cache_full rx_pp_recycle_ring rx_pp_recycle_ring_full rx_pp_recycle_released_ref Signed-off-by: Dipayaan Roy --- .../ethernet/microsoft/mana/mana_ethtool.c | 30 +++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/drivers/net/ethernet/microsoft/mana/mana_ethtool.c b/drivers/n= et/ethernet/microsoft/mana/mana_ethtool.c index f2d220b371b5..8fec74cdd3c3 100644 --- a/drivers/net/ethernet/microsoft/mana/mana_ethtool.c +++ b/drivers/net/ethernet/microsoft/mana/mana_ethtool.c @@ -6,6 +6,7 @@ #include =20 #include +#include =20 struct mana_stats_desc { char name[ETH_GSTRING_LEN]; @@ -143,8 +144,10 @@ static int mana_get_sset_count(struct net_device *ndev= , int stringset) if (stringset !=3D ETH_SS_STATS) return -EINVAL; =20 - return ARRAY_SIZE(mana_eth_stats) + ARRAY_SIZE(mana_phy_stats) + ARRAY_SI= ZE(mana_hc_stats) + - num_queues * (MANA_STATS_RX_COUNT + MANA_STATS_TX_COUNT); + return ARRAY_SIZE(mana_eth_stats) + ARRAY_SIZE(mana_phy_stats) + + ARRAY_SIZE(mana_hc_stats) + + num_queues * (MANA_STATS_RX_COUNT + MANA_STATS_TX_COUNT) + + page_pool_ethtool_stats_get_count(); } =20 static void mana_get_strings(struct net_device *ndev, u32 stringset, u8 *d= ata) @@ -185,6 +188,27 @@ static void mana_get_strings(struct net_device *ndev, = u32 stringset, u8 *data) ethtool_sprintf(&data, "tx_%d_csum_partial", i); ethtool_sprintf(&data, "tx_%d_mana_map_err", i); } + + page_pool_ethtool_stats_get_strings(data); +} + +static void mana_get_page_pool_stats(struct net_device *ndev, u64 *data) +{ +#ifdef CONFIG_PAGE_POOL_STATS + struct mana_port_context *apc =3D netdev_priv(ndev); + unsigned int num_queues =3D apc->num_queues; + struct page_pool_stats pp_stats =3D {}; + int q; + + for (q =3D 0; q < num_queues; q++) { + if (!apc->rxqs[q] || !apc->rxqs[q]->page_pool) + continue; + + page_pool_get_stats(apc->rxqs[q]->page_pool, &pp_stats); + } + + page_pool_ethtool_stats_get(data, &pp_stats); +#endif /* CONFIG_PAGE_POOL_STATS */ } =20 static void mana_get_ethtool_stats(struct net_device *ndev, @@ -280,6 +304,8 @@ static void mana_get_ethtool_stats(struct net_device *n= dev, data[i++] =3D csum_partial; data[i++] =3D mana_map_err; } + + mana_get_page_pool_stats(ndev, &data[i]); } =20 static u32 mana_get_rx_ring_count(struct net_device *ndev) --=20 2.43.0