From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 185E3606A31E for ; Sat, 24 Oct 2026 07:15:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key, unprotected) header.d=lists.infradead.org header.i=@lists.infradead.org header.a=rsa-sha256 header.s=bombadil.20210309 header.b=Jd422+7z; dkim=pass (1024-bit key, unprotected) header.d=163.com header.i=@163.com header.a=rsa-sha256 header.s=s110527 header.b=cTxKP0oj DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Unsubscribe-Post: List-Owner; bh=x0suRdZ6/DF0tbptt+Dz30G9c7M6uSYDspT/LuLlnuM=; b=Jd422+7zHbRSXI IhyHUruCgBeLd3wxB/inVR6WgdwrKbmJMDdJqoTt7+o/6cKr33bHJA0YBbcn4G+JamaoOngjZQn39 8No5SnlE4fiQLjOj1yFdrBRdMF1QY3KuuINyzIwJiRdqiAsxct84j4cLBVcDsd8g7Ta+uhPOA0JA8 upazx4yxBcQsyla59hCmiMEO37jxSWkxctKbRy0eqv+Q90VfhxGNikPvm2tPejEE49t859hKSKP0j C6OXKUZYGfoqD38GqgIAjdFXuUeHhSi6walIfAnkV1Cvktoa9nxb3ZWKofqq8Xz5jyyIKYb9KIuEq w27xnXOU5Z5BiPNuvyLQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.100.1 #2 (Red Hat Linux)) id 1xKVxK-0000000HXF9-170e; Sat, 24 Oct 2026 07:14:18 +0000 Received: from m16.mail.163.com ([117.135.210.5]) by bombadil.infradead.org with esmtps (Exim 4.100.1 #2 (Red Hat Linux)) id 1xKVxD-0000000HXBa-1pL9 for linux-arm-kernel@lists.infradead.org; Sat, 24 Oct 2026 07:14:14 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=163.com; s=s110527; h=From:To:Subject:Date:Message-Id:MIME-Version; bh=x0 suRdZ6/DF0tbptt+Dz30G9c7M6uSYDspT/LuLlnuM=; b=cTxKP0ojWv2mPX9M3I AeCX9Uu8pYsB7sUtCd1lc/YXCcBn7tpC1O9QOXpVK+xFlDpm4Mu3Iy2p8mlrlL8t +7i97IiR27OmUAjw2BuJbRXmbFxBa+fbztF2BDFMRbSxTftkPXBKes2Y9StBvKCm 60O6pVV4iDJyV7oU5TLY/FQj4= Received: from 4CV529F122.company.local (unknown []) by gzga-smtp-mtada-g0-0 (Coremail) with SMTP id _____wD310ySWtxq_y0rCg--.41124S6; Sat, 24 Oct 2026 15:13:45 +0800 (CST) From: Ding Hui To: Maxime Chevallier , Andrew Lunn , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Maxime Coquelin , Alexandre Torgue , 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) Cc: dinghui@lixiang.com, xiasanbo@lixiang.com, yangchen11@lixiang.com, liuxuanjun@lixiang.com Subject: [PATCH net-next v6 4/4] net: stmmac: hold RTNL when reading descriptor rings in descriptors_status Date: Sat, 24 Oct 2026 15:13:18 +0800 Message-Id: <20261024071319.875921-5-dinghui1111@163.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20261024071319.875921-1-dinghui1111@163.com> References: <20261024071319.875921-1-dinghui1111@163.com> X-Archived-By: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-CM-TRANSID: _____wD310ySWtxq_y0rCg--.41124S6 X-Coremail-Antispam: 1Uf129KBjvJXoWxXrW7Kr4rAr4kXr13Ww17ZFb_yoW5CrWrpa y3CayqkrykJF15Ja1DCw48Xa45Ga95tFW3Wrn7Gr1fA3WjvFZ0gwnIgry3WFyDGFWkX3Z3 K3Wq93sxGFW8C37anT9S1TB71UUUUU7qnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDUYxBIdaVFxhVjvjDU0xZFpf9x07jmjgxUUUUU= X-CM-SenderInfo: pglqwx1xlriiqr6rljoofrz/xtbC0QmSvmrcWqk0KAAA3t X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.9.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20261024_001411_889410_B8E0C989 X-CRM114-Status: GOOD ( 13.29 ) X-Spam-Score: -1.7 (-) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" X-Spam-Status: No, score=-15.8 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FORGED_FROMDOMAIN, FREEMAIL_FROM,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS, UNPARSEABLE_RELAY,USER_AGENT_GIT autolearn=ham autolearn_force=no version=4.0.1 X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-26) on aws-us-west-2-korg-listserv-alma10-1 From: Ding Hui The descriptors_status debugfs entry inspects the descriptor rings without any synchronization against the control-plane paths that tear them down (ndo_stop, MTU change, XDP program release, XSK pool reconfiguration). All of those paths hold RTNL, so take the same lock around the reader. Holding RTNL also makes it safe to report queues whose descriptor rings are not allocated: the interface may be IFF_UP with unallocated rings when an internal reopen fails (e.g. an MTU change whose __stmmac_open() call fails), as those paths do not clear IFF_UP. Skip such queues with a hint instead of dereferencing a NULL pointer in stmmac_rings_status_show(). Signed-off-by: Ding Hui --- .../net/ethernet/stmicro/stmmac/stmmac_main.c | 27 ++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c index b093119e752f..0f4af7ec3fc8 100644 --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c @@ -6707,8 +6707,10 @@ static int stmmac_rings_status_show(struct seq_file *seq, void *v) u8 tx_count = priv->plat->tx_queues_to_use; u8 queue; + rtnl_lock(); + if ((dev->flags & IFF_UP) == 0) - return 0; + goto out; for (queue = 0; queue < rx_count; queue++) { struct stmmac_rx_queue *rx_q = &priv->dma_conf.rx_queue[queue]; @@ -6716,10 +6718,20 @@ static int stmmac_rings_status_show(struct seq_file *seq, void *v) seq_printf(seq, "RX Queue %d:\n", queue); if (priv->extend_desc) { + if (!rx_q->dma_erx) { + seq_puts(seq, "Extended descriptor ring not allocated\n"); + continue; + } + seq_printf(seq, "Extended descriptor ring:\n"); sysfs_display_ring((void *)rx_q->dma_erx, priv->dma_conf.dma_rx_size, 1, seq, rx_q->dma_rx_phy); } else { + if (!rx_q->dma_rx) { + seq_puts(seq, "Descriptor ring not allocated\n"); + continue; + } + seq_printf(seq, "Descriptor ring:\n"); sysfs_display_ring((void *)rx_q->dma_rx, priv->dma_conf.dma_rx_size, 0, seq, rx_q->dma_rx_phy); @@ -6732,16 +6744,29 @@ static int stmmac_rings_status_show(struct seq_file *seq, void *v) seq_printf(seq, "TX Queue %d:\n", queue); if (priv->extend_desc) { + if (!tx_q->dma_etx) { + seq_puts(seq, "Extended descriptor ring not allocated\n"); + continue; + } + seq_printf(seq, "Extended descriptor ring:\n"); sysfs_display_ring((void *)tx_q->dma_etx, priv->dma_conf.dma_tx_size, 1, seq, tx_q->dma_tx_phy); } else if (!(tx_q->tbs & STMMAC_TBS_AVAIL)) { + if (!tx_q->dma_tx) { + seq_puts(seq, "Descriptor ring not allocated\n"); + continue; + } + seq_printf(seq, "Descriptor ring:\n"); sysfs_display_ring((void *)tx_q->dma_tx, priv->dma_conf.dma_tx_size, 0, seq, tx_q->dma_tx_phy); } } +out: + rtnl_unlock(); + return 0; } DEFINE_SHOW_ATTRIBUTE(stmmac_rings_status); -- 2.34.1