From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 22F86C46CD2 for ; Sat, 6 Jan 2024 07:17:24 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:References: Message-ID:Subject:Cc:To:From:Date:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=hZKLKwg7OZbVDNwlJCf1V3TrxtYhZij4/j4/20LKDIU=; b=Svn9TpAIWXxZkK piLDXMqj/xJ4X8OB4g4tQgAKDGfoatdeacfmpjROyPBG7SUAq8xNhWSGq0eckMDetdxUvg/Do1wK0 HOE/DckjBZLlwHshRs7KbBxLPXFJ/p9ZEKWpd1f/oHARbA9viQDkBYs/RuCoQhhXjW/H+qARGI5N0 AqyDTfxRdsGf+NOKK5dyd7ye0VDYUFUneTlpnVr44QDnQHBJWTzQi2vEOBZTaV+6voTWhPSshMVvG ORyE3o8rOvODqZnRIWXC1hLY83CoNbW8sCPwK6Vc62AuhllvLPsjWBBXX1Ex2vMdXYsE6RdDlveqO /WvMPj2SzgOoZBUa1HYg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1rM0vQ-000sXt-0w; Sat, 06 Jan 2024 07:16:56 +0000 Received: from ams.source.kernel.org ([145.40.68.75]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1rM0vN-000sXV-06 for linux-arm-kernel@lists.infradead.org; Sat, 06 Jan 2024 07:16:54 +0000 Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by ams.source.kernel.org (Postfix) with ESMTP id 33D48B81B4F; Sat, 6 Jan 2024 07:16:49 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 9290FC433C7; Sat, 6 Jan 2024 07:16:45 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1704525408; bh=dG0phtdnvCCkXxKsiM0aT+uPfINQvrWi1CxX3oZjNpk=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=UFXeACEHnSPawP6cd9scXaSiG/L0zYDNa6b03SxmQ06d+UguZqTrXUbK74SEx+QXa jXkGyoBBeJjY7TO/u0N50pS0Tfc624K+B4RUakx1tZ60wTlblLS+Tc9ZEYPX4z7Alw AgzgcBeA3CF+LkFyjNODcKMSNCb4oXWfJsu+rJFH7f6F2uQcSIXdroOKp0BB5YGdEw xOT3zbXOH6VrIY8NMQwd/yH80j4zHFV5kkJ0U8P3SHQwcKL8oHI5MSUHTtGKNlMKZE ynS31RyIRXfXEug2ZqdRD0jozOi/gP14IYrlGOn2LVYXpJsevBm4O7rPrWfX/jfgG2 4avy2DAskjOyQ== Date: Sat, 6 Jan 2024 15:04:01 +0800 From: Jisheng Zhang To: Petr Tesarik Cc: Alexandre Torgue , Jose Abreu , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Maxime Coquelin , Andrew Lunn , "open list:STMMAC ETHERNET DRIVER" , "moderated list:ARM/STM32 ARCHITECTURE" , "moderated list:ARM/STM32 ARCHITECTURE" , open list , stable@vger.kernel.org Subject: Re: [PATCH net] net: stmmac: fix ethtool per-queue statistics Message-ID: References: <20240105201642.30904-1-petr@tesarici.cz> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20240105201642.30904-1-petr@tesarici.cz> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240105_231653_419190_6FAA3960 X-CRM114-Status: GOOD ( 15.94 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org On Fri, Jan 05, 2024 at 09:16:42PM +0100, Petr Tesarik wrote: > Fix per-queue statistics for devices with more than one queue. > > The output data pointer is currently reset in each loop iteration, > effectively summing all queue statistics in the first four u64 values. > > The summary values are not even labeled correctly. For example, if eth0 has > 2 queues, ethtool -S eth0 shows: > > q0_tx_pkt_n: 374 (actually tx_pkt_n over all queues) > q0_tx_irq_n: 23 (actually tx_normal_irq_n over all queues) > q1_tx_pkt_n: 462 (actually rx_pkt_n over all queues) > q1_tx_irq_n: 446 (actually rx_normal_irq_n over all queues) > q0_rx_pkt_n: 0 > q0_rx_irq_n: 0 > q1_rx_pkt_n: 0 > q1_rx_irq_n: 0 > > Fixes: 133466c3bbe1 ("net: stmmac: use per-queue 64 bit statistics where necessary") > Cc: stable@vger.kernel.org > Signed-off-by: Petr Tesarik Good catch! I mixed this with the statics sum up for stmmac_qstats_string[]. Reviewed-by: Jisheng Zhang > --- > drivers/net/ethernet/stmicro/stmmac/stmmac_ethtool.c | 9 ++------- > 1 file changed, 2 insertions(+), 7 deletions(-) > > diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_ethtool.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_ethtool.c > index f628411ae4ae..112a36a698f1 100644 > --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_ethtool.c > +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_ethtool.c > @@ -543,15 +543,12 @@ static void stmmac_get_per_qstats(struct stmmac_priv *priv, u64 *data) > u32 rx_cnt = priv->plat->rx_queues_to_use; > unsigned int start; > int q, stat; > - u64 *pos; > char *p; > > - pos = data; > for (q = 0; q < tx_cnt; q++) { > struct stmmac_txq_stats *txq_stats = &priv->xstats.txq_stats[q]; > struct stmmac_txq_stats snapshot; > > - data = pos; > do { > start = u64_stats_fetch_begin(&txq_stats->syncp); > snapshot = *txq_stats; > @@ -559,17 +556,15 @@ static void stmmac_get_per_qstats(struct stmmac_priv *priv, u64 *data) > > p = (char *)&snapshot + offsetof(struct stmmac_txq_stats, tx_pkt_n); > for (stat = 0; stat < STMMAC_TXQ_STATS; stat++) { > - *data++ += (*(u64 *)p); > + *data++ = (*(u64 *)p); > p += sizeof(u64); > } > } > > - pos = data; > for (q = 0; q < rx_cnt; q++) { > struct stmmac_rxq_stats *rxq_stats = &priv->xstats.rxq_stats[q]; > struct stmmac_rxq_stats snapshot; > > - data = pos; > do { > start = u64_stats_fetch_begin(&rxq_stats->syncp); > snapshot = *rxq_stats; > @@ -577,7 +572,7 @@ static void stmmac_get_per_qstats(struct stmmac_priv *priv, u64 *data) > > p = (char *)&snapshot + offsetof(struct stmmac_rxq_stats, rx_pkt_n); > for (stat = 0; stat < STMMAC_RXQ_STATS; stat++) { > - *data++ += (*(u64 *)p); > + *data++ = (*(u64 *)p); > p += sizeof(u64); > } > } > -- > 2.43.0 > _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel