Received: by 2002:a05:7412:40d:b0:e2:908c:2ebd with SMTP id 13csp1180127rdf; Wed, 22 Nov 2023 07:36:54 -0800 (PST) X-Google-Smtp-Source: AGHT+IHMBVHS5cCYEuzVZuclvlotaUBxXNXctIT1aPcZJdsqwhuq4cAOs9Q0+XnHnpRMh1wQTYan X-Received: by 2002:a17:90b:38c8:b0:280:14ac:a6db with SMTP id nn8-20020a17090b38c800b0028014aca6dbmr2790290pjb.18.1700667414103; Wed, 22 Nov 2023 07:36:54 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1700667414; cv=none; d=google.com; s=arc-20160816; b=QZfAiVHc8ZxeQdxt4g3zNloG8wtc4wlj8ZkeUBt/+rLz1h5WUwOkPZFyTDgRYXB15a IVjMTCHaO6oyh3AQJq3O9NC/OBCmXfsgjxayQdqYclAcLJCtB7PJgdFW3fxk7BsKFPln sOfh0znJPEVnPnAOy5juIcI3aiynw/ctAAoMBJGrK2VM+qPFlso9U+nFjuLhn00cbGh/ CW1k53s4O7a9TcvGkRI2yCtE32zQI6XU292WiTRWBwfexyxdysp6URpxC3r0B+wwqjtw px5l6n6tK9frwUacleuaPn6nMSeGyFK6/PSDdLlZ/Dz9+pRj1dqAzC2wJz4l/hAsni62 R+7g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=lhh1Wb+qXsdfs1l3Kbacpz4QCVZ9A0qSihUSILgvAjo=; fh=s8CQEQo9xOB3SM6yfOgLmZ1vOnqLkFfNKwv/CiX4F+M=; b=WD5D8DUKDB7UtlBiPEBn98FNIskfog9yknDjZVOrg3/+JwyWrxn4sIZWgBjnHJAhgS /W7u8cxE7+1V6u/eb9ziHC/s5DtZxlj+GwakSYFhtW/jkgUg9zHxH4gmTdqKeY3TSBJG WAw9xKHE6pWC7J4B8OrdzGpL+nkDYJv/JSr8yS1M40bW9z2gRzhNh4TAZdGFT0y31yLu mLHkZz9e55G5BnAvQU3AgdaXDz/x2g9Z4NbDGeKNwjZzf2Q/NG41ZLmkj/7V2T3Zimhd 7ASkkQTy71Ah/k0fw8ZvM7kuxRFBcuNa395YXbD9eCkzd/F3qkmFOtXFrz7KrPhlBBQU 1tYQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=OrIBdFne; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.32 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from agentk.vger.email (agentk.vger.email. [23.128.96.32]) by mx.google.com with ESMTPS id kb16-20020a17090ae7d000b0028014e223f9si1768272pjb.81.2023.11.22.07.36.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 22 Nov 2023 07:36:54 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.32 as permitted sender) client-ip=23.128.96.32; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=OrIBdFne; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.32 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by agentk.vger.email (Postfix) with ESMTP id 20414819ADBA; Wed, 22 Nov 2023 07:36:31 -0800 (PST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at agentk.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1344491AbjKVPfq (ORCPT + 99 others); Wed, 22 Nov 2023 10:35:46 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41250 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1344507AbjKVPfW (ORCPT ); Wed, 22 Nov 2023 10:35:22 -0500 Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 116F81FE3; Wed, 22 Nov 2023 07:34:18 -0800 (PST) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 45FBDC433CD; Wed, 22 Nov 2023 15:34:07 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1700667248; bh=KoGEjoqMqcRPF9uAq//ROKVqN1pu9TARfKhCvTStpiM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=OrIBdFnecyK254oGUA8ThucUySKUS+bq1risAPonPUODo3IXek9bFKDNhCvHz2mEx zmuVNGmoscAtX04SdZVdm/q+FtBSouOiISw/e2H3ZCgRQXhw7ClcZGvmxppd1/X7Q0 cIvJq2wd9wudj4vLPBbj81ciwxrV7KLzxCfh1AdK/xQPhCZLGmm9ND5Ff2THbAAfmR p5KKYdeWRDxsP66hGBqSIpT4G9TRP0LuIFr1an7O+lbVtElbJ9ginydDrRhDTAya3J V0tCbWpr7OTDV0TDYd2zskv8oCdi7NzubO7tOKv9LA6pLWNiGTV+zwtJc0kef6Rual s6Tpy2CE0m77A== From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Alex Pakhunov , Vincent Wong , Michael Chan , Jakub Kicinski , Sasha Levin , pavan.chebbi@broadcom.com, mchan@broadcom.com, davem@davemloft.net, edumazet@google.com, pabeni@redhat.com, netdev@vger.kernel.org Subject: [PATCH AUTOSEL 6.5 08/15] tg3: Move the [rt]x_dropped counters to tg3_napi Date: Wed, 22 Nov 2023 10:33:10 -0500 Message-ID: <20231122153340.852434-8-sashal@kernel.org> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20231122153340.852434-1-sashal@kernel.org> References: <20231122153340.852434-1-sashal@kernel.org> MIME-Version: 1.0 X-stable: review X-Patchwork-Hint: Ignore X-stable-base: Linux 6.5.12 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-1.3 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on agentk.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (agentk.vger.email [0.0.0.0]); Wed, 22 Nov 2023 07:36:32 -0800 (PST) From: Alex Pakhunov [ Upstream commit 907d1bdb8b2cc0357d03a1c34d2a08d9943760b1 ] This change moves [rt]x_dropped counters to tg3_napi so that they can be updated by a single writer, race-free. Signed-off-by: Alex Pakhunov Signed-off-by: Vincent Wong Reviewed-by: Michael Chan Link: https://lore.kernel.org/r/20231113182350.37472-1-alexey.pakhunov@spacex.com Signed-off-by: Jakub Kicinski Signed-off-by: Sasha Levin --- drivers/net/ethernet/broadcom/tg3.c | 38 +++++++++++++++++++++++++---- drivers/net/ethernet/broadcom/tg3.h | 4 +-- 2 files changed, 35 insertions(+), 7 deletions(-) diff --git a/drivers/net/ethernet/broadcom/tg3.c b/drivers/net/ethernet/broadcom/tg3.c index 9d1de202ac714..0480b10701d5d 100644 --- a/drivers/net/ethernet/broadcom/tg3.c +++ b/drivers/net/ethernet/broadcom/tg3.c @@ -6846,7 +6846,7 @@ static int tg3_rx(struct tg3_napi *tnapi, int budget) desc_idx, *post_ptr); drop_it_no_recycle: /* Other statistics kept track of by card. */ - tp->rx_dropped++; + tnapi->rx_dropped++; goto next_pkt; } @@ -8147,7 +8147,7 @@ static netdev_tx_t tg3_start_xmit(struct sk_buff *skb, struct net_device *dev) drop: dev_kfree_skb_any(skb); drop_nofree: - tp->tx_dropped++; + tnapi->tx_dropped++; return NETDEV_TX_OK; } @@ -9326,7 +9326,7 @@ static void __tg3_set_rx_mode(struct net_device *); /* tp->lock is held. */ static int tg3_halt(struct tg3 *tp, int kind, bool silent) { - int err; + int err, i; tg3_stop_fw(tp); @@ -9347,6 +9347,13 @@ static int tg3_halt(struct tg3 *tp, int kind, bool silent) /* And make sure the next sample is new data */ memset(tp->hw_stats, 0, sizeof(struct tg3_hw_stats)); + + for (i = 0; i < TG3_IRQ_MAX_VECS; ++i) { + struct tg3_napi *tnapi = &tp->napi[i]; + + tnapi->rx_dropped = 0; + tnapi->tx_dropped = 0; + } } return err; @@ -11896,6 +11903,9 @@ static void tg3_get_nstats(struct tg3 *tp, struct rtnl_link_stats64 *stats) { struct rtnl_link_stats64 *old_stats = &tp->net_stats_prev; struct tg3_hw_stats *hw_stats = tp->hw_stats; + unsigned long rx_dropped; + unsigned long tx_dropped; + int i; stats->rx_packets = old_stats->rx_packets + get_stat64(&hw_stats->rx_ucast_packets) + @@ -11942,8 +11952,26 @@ static void tg3_get_nstats(struct tg3 *tp, struct rtnl_link_stats64 *stats) stats->rx_missed_errors = old_stats->rx_missed_errors + get_stat64(&hw_stats->rx_discards); - stats->rx_dropped = tp->rx_dropped; - stats->tx_dropped = tp->tx_dropped; + /* Aggregate per-queue counters. The per-queue counters are updated + * by a single writer, race-free. The result computed by this loop + * might not be 100% accurate (counters can be updated in the middle of + * the loop) but the next tg3_get_nstats() will recompute the current + * value so it is acceptable. + * + * Note that these counters wrap around at 4G on 32bit machines. + */ + rx_dropped = (unsigned long)(old_stats->rx_dropped); + tx_dropped = (unsigned long)(old_stats->tx_dropped); + + for (i = 0; i < tp->irq_cnt; i++) { + struct tg3_napi *tnapi = &tp->napi[i]; + + rx_dropped += tnapi->rx_dropped; + tx_dropped += tnapi->tx_dropped; + } + + stats->rx_dropped = rx_dropped; + stats->tx_dropped = tx_dropped; } static int tg3_get_regs_len(struct net_device *dev) diff --git a/drivers/net/ethernet/broadcom/tg3.h b/drivers/net/ethernet/broadcom/tg3.h index 1000c894064f0..8d753f8c5b065 100644 --- a/drivers/net/ethernet/broadcom/tg3.h +++ b/drivers/net/ethernet/broadcom/tg3.h @@ -3018,6 +3018,7 @@ struct tg3_napi { u16 *rx_rcb_prod_idx; struct tg3_rx_prodring_set prodring; struct tg3_rx_buffer_desc *rx_rcb; + unsigned long rx_dropped; u32 tx_prod ____cacheline_aligned; u32 tx_cons; @@ -3026,6 +3027,7 @@ struct tg3_napi { u32 prodmbox; struct tg3_tx_buffer_desc *tx_ring; struct tg3_tx_ring_info *tx_buffers; + unsigned long tx_dropped; dma_addr_t status_mapping; dma_addr_t rx_rcb_mapping; @@ -3219,8 +3221,6 @@ struct tg3 { /* begin "everything else" cacheline(s) section */ - unsigned long rx_dropped; - unsigned long tx_dropped; struct rtnl_link_stats64 net_stats_prev; struct tg3_ethtool_stats estats_prev; -- 2.42.0