Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

net: macb: fix unregister_netdev call order in macb_remove()

When removing a macb device, the driver calls phy_exit() before
unregister_netdev(). This leads to a WARN from kernfs:

------------[ cut here ]------------
kernfs: can not remove 'attached_dev', no directory
WARNING: CPU: 1 PID: 27146 at fs/kernfs/dir.c:1683
Call trace:
kernfs_remove_by_name_ns+0xd8/0xf0
sysfs_remove_link+0x24/0x58
phy_detach+0x5c/0x168
phy_disconnect+0x4c/0x70
phylink_disconnect_phy+0x6c/0xc0 [phylink]
macb_close+0x6c/0x170 [macb]
...
macb_remove+0x60/0x168 [macb]
platform_remove+0x5c/0x80
...

The warning happens because the PHY is being exited while the netdev
is still registered. The correct order is to unregister the netdev
before shutting down the PHY and cleaning up the MDIO bus.

Fix this by moving unregister_netdev() ahead of phy_exit() in
macb_remove().

Fixes: 8b73fa3ae02b ("net: macb: Added ZynqMP-specific initialization")
Signed-off-by: luoguangfei <15388634752@163.com>
Link: https://patch.msgid.link/20250818232527.1316-1-15388634752@163.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>

authored by

luoguangfei and committed by
Jakub Kicinski
01b9128c e959fe78

+1 -1
+1 -1
drivers/net/ethernet/cadence/macb_main.c
··· 5399 5399 5400 5400 if (dev) { 5401 5401 bp = netdev_priv(dev); 5402 + unregister_netdev(dev); 5402 5403 phy_exit(bp->sgmii_phy); 5403 5404 mdiobus_unregister(bp->mii_bus); 5404 5405 mdiobus_free(bp->mii_bus); 5405 5406 5406 - unregister_netdev(dev); 5407 5407 cancel_work_sync(&bp->hresp_err_bh_work); 5408 5408 pm_runtime_disable(&pdev->dev); 5409 5409 pm_runtime_dont_use_autosuspend(&pdev->dev);