Message ID | 1669258989-18277-1-git-send-email-zhangchangzhong@huawei.com (mailing list archive) |
---|---|
State | Accepted |
Commit | 46fb6512538d201d9a5b2bd7138b6751c37fdf0b |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | [net] net: ethernet: ti: am65-cpsw: fix error handling in am65_cpsw_nuss_probe() | expand |
On Thu, Nov 24, 2022 at 11:03:08AM +0800, Zhang Changzhong wrote: > The am65_cpsw_nuss_cleanup_ndev() function calls unregister_netdev() > even if register_netdev() fails, which triggers WARN_ON(1) in If this has been only compile tested then I assume you haven't encounter this WARN_ON(1) trigger by yourself? > unregister_netdevice_many(). To fix it, make sure that > unregister_netdev() is called only on registered netdev. > > Compile tested only. > > Fixes: 84b4aa493249 ("net: ethernet: ti: am65-cpsw: add multi port support in mac-only mode") > Signed-off-by: Zhang Changzhong <zhangchangzhong@huawei.com> > --- > drivers/net/ethernet/ti/am65-cpsw-nuss.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/drivers/net/ethernet/ti/am65-cpsw-nuss.c b/drivers/net/ethernet/ti/am65-cpsw-nuss.c > index c50b137..d04a239 100644 > --- a/drivers/net/ethernet/ti/am65-cpsw-nuss.c > +++ b/drivers/net/ethernet/ti/am65-cpsw-nuss.c > @@ -2082,7 +2082,7 @@ static void am65_cpsw_nuss_cleanup_ndev(struct am65_cpsw_common *common) > > for (i = 0; i < common->port_num; i++) { > port = &common->ports[i]; > - if (port->ndev) > + if (port->ndev && port->ndev->reg_state == NETREG_REGISTERED) > unregister_netdev(port->ndev); It seems that if am65_cpsw_nuss_register_ndevs() fails on register_netdev() port->ndev is still a valid pointer, so your assumption looks correct to me. Reviewed-by: Maciej Fijalkowski <maciej.fijalkowski@intel.com> > } > } > -- > 2.9.5 >
Hello: This patch was applied to netdev/net.git (master) by David S. Miller <davem@davemloft.net>: On Thu, 24 Nov 2022 11:03:08 +0800 you wrote: > The am65_cpsw_nuss_cleanup_ndev() function calls unregister_netdev() > even if register_netdev() fails, which triggers WARN_ON(1) in > unregister_netdevice_many(). To fix it, make sure that > unregister_netdev() is called only on registered netdev. > > Compile tested only. > > [...] Here is the summary with links: - [net] net: ethernet: ti: am65-cpsw: fix error handling in am65_cpsw_nuss_probe() https://git.kernel.org/netdev/net/c/46fb6512538d You are awesome, thank you!
diff --git a/drivers/net/ethernet/ti/am65-cpsw-nuss.c b/drivers/net/ethernet/ti/am65-cpsw-nuss.c index c50b137..d04a239 100644 --- a/drivers/net/ethernet/ti/am65-cpsw-nuss.c +++ b/drivers/net/ethernet/ti/am65-cpsw-nuss.c @@ -2082,7 +2082,7 @@ static void am65_cpsw_nuss_cleanup_ndev(struct am65_cpsw_common *common) for (i = 0; i < common->port_num; i++) { port = &common->ports[i]; - if (port->ndev) + if (port->ndev && port->ndev->reg_state == NETREG_REGISTERED) unregister_netdev(port->ndev); } }
The am65_cpsw_nuss_cleanup_ndev() function calls unregister_netdev() even if register_netdev() fails, which triggers WARN_ON(1) in unregister_netdevice_many(). To fix it, make sure that unregister_netdev() is called only on registered netdev. Compile tested only. Fixes: 84b4aa493249 ("net: ethernet: ti: am65-cpsw: add multi port support in mac-only mode") Signed-off-by: Zhang Changzhong <zhangchangzhong@huawei.com> --- drivers/net/ethernet/ti/am65-cpsw-nuss.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)