Received: by 2002:a05:7412:98c1:b0:fa:551:50a7 with SMTP id kc1csp307542rdb; Fri, 5 Jan 2024 10:25:06 -0800 (PST) X-Google-Smtp-Source: AGHT+IFVyyE6aABKN8aXBUnPNxB7zEHpAebzQ4yugtLNfB9o3K5UnYwDzgtdOPR5kSiqiqxWG/Bb X-Received: by 2002:a17:902:d2cb:b0:1d4:2473:e833 with SMTP id n11-20020a170902d2cb00b001d42473e833mr2626764plc.69.1704479106227; Fri, 05 Jan 2024 10:25:06 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1704479106; cv=none; d=google.com; s=arc-20160816; b=gTj7CIGtH6pMMMqHgB0YkemtSLT84BFcU4AG0e+xGRjO6Y4iCwM5pYpGdCIuPPF0Ub V1rCql0+hW+cC6hwyne6PGcgLbKz68DUnssS4QM+8udFP9dWXrtsCqmBUJGFE030Zuxv OsJCLseTDod9fShx5SpXU8+lOM2pnl+yfG04K9nr8eJ/KdPH0vQXC9udaBf6gdBo/MRq cNcOsnFMMXovM5bbrUrw+EdSFv0sTgVwlh+5nq3oifJFG0CQg3x3RblxBD+mMUzS6fiB PdCv+mgXUUOWTWYAV0tcr0FH8sp1BBfkz6t8aAbAlSq4OLu7t/00TwHrLtpTGJkkrqoE RIng== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:references:in-reply-to:message-id :subject:to:from:date:dkim-signature; bh=ftXSqrBGW0uAQeUiWEoqzTgaBmkEN7R3IOg9QoP73DQ=; fh=asUOscMkCbee5JhT2fWhzjLUNm1rURUdDIzbwDpxQR8=; b=AoTpUtlt6FAmpflqy0Rwv05NXJjwVJkKrOXDivk9aDk5N22gGnVkiBOWNgo8BSV9VU BZ/jkl1+ydx1Y73P7HorKqQp+XYO8XYoy580hSKfXoeYAEXtXBBKB3kwNCh6lfQ2J6Ff BAiZbZdgSHFWrF1GEjF4WZBouZHeLXUhEItpcn51y5U1GR3L+lPhZgpf1KAn9e35CruY +xRQYzRgp2JgWsP2+QGAHyZ8+LoY7WxQkh+hcaHsDkynxP6jNsMRoGwGiZ1aglaRZgXF 0odbXcDPLzXtU7q97XyR4vfLInktRnEWLqzTyzL+nep5jDn8ecegQ8iTr8plW02uPhEi Mo3A== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@tesarici.cz header.s=mail header.b=4pQgXYp6; spf=pass (google.com: domain of linux-kernel+bounces-18207-linux.lists.archive=gmail.com@vger.kernel.org designates 139.178.88.99 as permitted sender) smtp.mailfrom="linux-kernel+bounces-18207-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=tesarici.cz Return-Path: Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org. [139.178.88.99]) by mx.google.com with ESMTPS id 13-20020a170902ee4d00b001d49c5dc4ecsi1559261plo.546.2024.01.05.10.25.05 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 05 Jan 2024 10:25:06 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-18207-linux.lists.archive=gmail.com@vger.kernel.org designates 139.178.88.99 as permitted sender) client-ip=139.178.88.99; Authentication-Results: mx.google.com; dkim=pass header.i=@tesarici.cz header.s=mail header.b=4pQgXYp6; spf=pass (google.com: domain of linux-kernel+bounces-18207-linux.lists.archive=gmail.com@vger.kernel.org designates 139.178.88.99 as permitted sender) smtp.mailfrom="linux-kernel+bounces-18207-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=tesarici.cz Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sv.mirrors.kernel.org (Postfix) with ESMTPS id E5027281EB2 for ; Fri, 5 Jan 2024 18:24:52 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 511AD35288; Fri, 5 Jan 2024 18:24:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=tesarici.cz header.i=@tesarici.cz header.b="4pQgXYp6" X-Original-To: linux-kernel@vger.kernel.org Received: from bee.tesarici.cz (bee.tesarici.cz [77.93.223.253]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0647535281; Fri, 5 Jan 2024 18:24:42 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=tesarici.cz Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=tesarici.cz Received: from meshulam.tesarici.cz (dynamic-2a00-1028-83b8-1e7a-4427-cc85-6706-c595.ipv6.o2.cz [IPv6:2a00:1028:83b8:1e7a:4427:cc85:6706:c595]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange ECDHE (P-256) server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by bee.tesarici.cz (Postfix) with ESMTPSA id D9E6A1A8DCA; Fri, 5 Jan 2024 19:24:40 +0100 (CET) Authentication-Results: mail.tesarici.cz; dmarc=fail (p=none dis=none) header.from=tesarici.cz DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=tesarici.cz; s=mail; t=1704479081; bh=lECx6wJ8hTDHgWAeoctGBpCHkMYGWBD6irxNs47zoc4=; h=Date:From:To:Subject:In-Reply-To:References:From; b=4pQgXYp6WGYwueAPMsIHiAvqgv5eibw86SO84rQ/uaAbbBUWzoca8whBlIiDNrff1 MtHQhGft8MOHZJYGrFaBuW0gUY8zoNYP4ls1jdiBcrnU8sOX88T2afszRU4UvF0T9R l/bE9U3DzIw/HSxEGX90iHHjbwSMAg18QC3dagtcmE8z8PWJweOsPaveqiySLlK7x9 GtogrquwnOBqzCf46l+YTWFmgb2Ij7VqPH9wdMjXDcPBeatlvFQaK9zgAtmxABiy58 CzLaRxrkBT0oSmo5qQ9zcqnqwk6VpEjIzLXntNZlym4v9V1EgzYKkHA08/W69/ijH6 fhucOxEr0GIuQ== Date: Fri, 5 Jan 2024 19:24:40 +0100 From: Petr =?UTF-8?B?VGVzYcWZw61r?= To: Alexandre Torgue , Jose Abreu , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Maxime Coquelin , Jisheng Zhang , netdev@vger.kernel.org (open list:STMMAC ETHERNET DRIVER), linux-stm32@st-md-mailman.stormreply.com (moderated list:ARM/STM32 ARCHITECTURE), linux-arm-kernel@lists.infradead.org (moderated list:ARM/STM32 ARCHITECTURE), linux-kernel@vger.kernel.org (open list) Subject: Re: [PATCH] net: stmmac: fix ethtool per-queue statistics Message-ID: <20240105192440.25a7b954@meshulam.tesarici.cz> In-Reply-To: <20240105181024.14418-1-petr@tesarici.cz> References: <20240105181024.14418-1-petr@tesarici.cz> X-Mailer: Claws Mail 4.2.0 (GTK 3.24.39; x86_64-suse-linux-gnu) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit On Fri, 5 Jan 2024 19:10:24 +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 > > While touching this code, change the pointer type to u64 and get rid of the > weird pointer arithmetic. Just to make sure, this fix has nothing to do with my previous stmmac fix. It's just a fix for something I noticed while working on the other patch. I hope this fix can be merged fast, so I can base my other patch on it. Petr T > Signed-off-by: Petr Tesarik > Fixes: 133466c3bbe1 ("net: stmmac: use per-queue 64 bit statistics where necessary") > --- > .../ethernet/stmicro/stmmac/stmmac_ethtool.c | 23 ++++++------------- > 1 file changed, 7 insertions(+), 16 deletions(-) > > diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_ethtool.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_ethtool.c > index f628411ae4ae..023876fc4da7 100644 > --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_ethtool.c > +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_ethtool.c > @@ -543,43 +543,34 @@ 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; > + u64 *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; > } while (u64_stats_fetch_retry(&txq_stats->syncp, start)); > > - p = (char *)&snapshot + offsetof(struct stmmac_txq_stats, tx_pkt_n); > - for (stat = 0; stat < STMMAC_TXQ_STATS; stat++) { > - *data++ += (*(u64 *)p); > - p += sizeof(u64); > - } > + p = &snapshot.tx_pkt_n; > + for (stat = 0; stat < STMMAC_TXQ_STATS; stat++) > + *data++ = *p++; > } > > - 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; > } while (u64_stats_fetch_retry(&rxq_stats->syncp, start)); > > - p = (char *)&snapshot + offsetof(struct stmmac_rxq_stats, rx_pkt_n); > - for (stat = 0; stat < STMMAC_RXQ_STATS; stat++) { > - *data++ += (*(u64 *)p); > - p += sizeof(u64); > - } > + p = &snapshot.rx_pkt_n; > + for (stat = 0; stat < STMMAC_RXQ_STATS; stat++) > + *data++ = *p++; > } > } >