Thread (10 messages) flat view 10 messages, 4 authors, 1d ago

RE: [PATCH net v2 2/2] net: ngbe: clear DRV_LOAD bit when ngbe_open() fails

From: Loktionov, Aleksandr <hidden>
Date: 2026-09-22 11:10:14
Also in: lkml, stable

quoted hunk ↗ jump to hunk
-----Original Message-----
From: Zhang Yunfei <redacted>
Sent: Tuesday, September 22, 2026 12:09 PM
To: netdev@vger.kernel.org
Cc: jiawenwu@trustnetic.com; mengyuanlou@net-swift.com;
andrew+netdev@lunn.ch; davem@davemloft.net; edumazet@google.com;
kuba@kernel.org; pabeni@redhat.com; Loktionov, Aleksandr
[off-list ref]; leitao@debian.org;
weirongguang@kylinos.cn; u.kleine-koenig@baylibre.com; linux-
kernel@vger.kernel.org; stable@vger.kernel.org
Subject: [PATCH net v2 2/2] net: ngbe: clear DRV_LOAD bit when
ngbe_open() fails

ngbe_open() sets the WX_CFG_PORT_CTL_DRV_LOAD bit via
wx_control_hw(wx, true) to tell the management firmware that the host
driver has taken over the port (NCSI/OOB firmware stops using its
management channel). Every error path of ngbe_open() returns without
clearing it, leaving rings, IRQs and the PHY torn down while the
firmware still believes the host owns the port, an inconsistent
driver-firmware handshake state that persists until the next
successful ifup.

Roll the bit back on all open error paths, matching ngbe_close() and
ngbe_dev_shutdown(), which already clear it.

Fixes: e7956139a6cf ("net: ngbe: Add irqs request flow")
Cc: stable@vger.kernel.org
Signed-off-by: Zhang Yunfei <redacted>
---
 drivers/net/ethernet/wangxun/ngbe/ngbe_main.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/drivers/net/ethernet/wangxun/ngbe/ngbe_main.c
b/drivers/net/ethernet/wangxun/ngbe/ngbe_main.c
index e8cabcc84a41..7e2cc69fe8f8 100644
--- a/drivers/net/ethernet/wangxun/ngbe/ngbe_main.c
+++ b/drivers/net/ethernet/wangxun/ngbe/ngbe_main.c
@@ -494,7 +494,7 @@ static int ngbe_open(struct net_device *netdev)

 	err = wx_setup_resources(wx);
 	if (err)
-		return err;
+		goto err_control_hw;

 	wx_configure(wx);
@@ -526,6 +526,8 @@ static int ngbe_open(struct net_device *netdev)
 err_free_resources:
 	wx_free_isb_resources(wx);
 	wx_free_resources(wx);
+err_control_hw:
+	wx_control_hw(wx, false);
 	return err;
 }

--
2.25.1
Reviewed-by: Aleksandr Loktionov <redacted>
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help