Thread (33 messages) 33 messages, 3 authors, 25d ago

Re: [PATCH net 12/12] net: systemport: Complete resource teardown even on DMA disable timeout

flat view

From: Nicolai Buchwitz <nb@tipi-net.de>
Date: 2026-09-22 09:47:56
Also in: lkml

Hi Florian

On 22.9.2026 01:13, Florian Fainelli wrote:
quoted hunk ↗ jump to hunk
In bcm_sysport_stop(), if tdma_enable_set() or rdma_enable_set() timed
out, the function returned early with an error code. However, ndo_stop()
callers in the networking core ignore error returns, leaving the
software ring structures allocated, interrupts registered, PHY
connected, and clock enabled. If the interface was subsequently brought
up again, request_irq() and PHY connection would fail or leak.

Ensure all software ring teardown, interrupt freeing, PHY
disconnection, and clock disabling steps are executed regardless of DMA
disable timeouts.

Fixes: 80105befdb4b ("net: systemport: add Broadcom SYSTEMPORT Ethernet MAC driver")
Assisted-by: LLM
Signed-off-by: Florian Fainelli <florian.fainelli@broadcom.com>
---
 drivers/net/ethernet/broadcom/bcmsysport.c | 8 ++------
 1 file changed, 2 insertions(+), 6 deletions(-)
diff --git a/drivers/net/ethernet/broadcom/bcmsysport.c b/drivers/net/ethernet/broadcom/bcmsysport.c
index e5bb7fa84fda..2b064da4eb7c 100644
--- a/drivers/net/ethernet/broadcom/bcmsysport.c
+++ b/drivers/net/ethernet/broadcom/bcmsysport.c
@@ -2088,19 +2088,15 @@ static int bcm_sysport_stop(struct net_device *dev)
 	umac_enable_set(priv, CMD_RX_EN, 0);

 	ret = tdma_enable_set(priv, 0);
-	if (ret) {
+	if (ret)
 		netdev_err(dev, "timeout disabling TDMA\n");
-		return ret;
-	}

 	/* Wait for a maximum packet size to be drained */
 	usleep_range(2000, 3000);

 	ret = rdma_enable_set(priv, 0);
-	if (ret) {
+	if (ret)
 		netdev_err(dev, "timeout disabling RDMA\n");
-		return ret;
-	}
If TDMA or RDMA don't stop, the rings get freed while the hardware may
still use them. Maybe topctrl_flush() before freeing?

The same pattern would probably apply to bcm_sysport_suspend().
[...]
Thanks,
Nicolai
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help