RE: [PATCH] net: cpsw_new: unregister devlink on port registration failure
"Loktionov, Aleksandr" <[email protected]>
| Newsgroups | org.kernel.vger.linux-omap,org.kernel.vger.linux-kernel,org.kernel.vger.netdev |
|---|---|
| Message-ID | <IA3PR11MB898623B5BB7ECF02CADF7B4EE5132@IA3PR11MB8986.namprd11.prod.outlook.com> |
> -----Original Message----- > From: Guangshuo Li <[email protected]> > Sent: Wednesday, June 3, 2026 4:08 PM > To: Siddharth Vadapalli <[email protected]>; Roger Quadros > <[email protected]>; Andrew Lunn <[email protected]>; David S. > Miller <[email protected]>; Eric Dumazet <[email protected]>; > Jakub Kicinski <[email protected]>; Paolo Abeni <[email protected]>; > Kevin Hao <[email protected]>; Alexander Sverdlin > <[email protected]>; Loktionov, Aleksandr > <[email protected]>; Daniel Zahka > <[email protected]>; Guangshuo Li <[email protected]>; > Ilias Apalodimas <[email protected]>; Murali Karicheri <m- > [email protected]>; Grygorii Strashko <[email protected]>; > [email protected]; [email protected]; linux- > [email protected] > Subject: [PATCH] net: cpsw_new: unregister devlink on port > registration failure > > cpsw_probe() registers devlink before registering the CPSW ports. > > If cpsw_register_ports() fails, the error path only unregisters the > notifiers and then releases the lower level resources. It does not > undo the successful cpsw_register_devlink() call, leaving the devlink > instance and its parameters registered after probe has failed. > > Add a devlink cleanup label for the path where devlink registration > has already succeeded, and use it when port registration fails. > > Fixes: ed3525eda4c4 ("net: ethernet: ti: introduce cpsw switchdev > based driver part 1 - dual-emac") > Signed-off-by: Guangshuo Li <[email protected]> > --- > drivers/net/ethernet/ti/cpsw_new.c | 4 +++- > 1 file changed, 3 insertions(+), 1 deletion(-) > > diff --git a/drivers/net/ethernet/ti/cpsw_new.c > b/drivers/net/ethernet/ti/cpsw_new.c > index 7f42f58a4b03..95b3b58db6e0 100644 > --- a/drivers/net/ethernet/ti/cpsw_new.c > +++ b/drivers/net/ethernet/ti/cpsw_new.c > @@ -2050,7 +2050,7 @@ static int cpsw_probe(struct platform_device > *pdev) > > ret = cpsw_register_ports(cpsw); > if (ret) > - goto clean_unregister_notifiers; > + goto clean_unregister_devlink; > > dev_notice(dev, "initialized (regs %pa, pool size %d) > hw_ver:%08X %d.%d (%d)\n", > &ss_res->start, descs_pool_size, > @@ -2062,6 +2062,8 @@ static int cpsw_probe(struct platform_device > *pdev) > > return 0; > > +clean_unregister_devlink: > + cpsw_unregister_devlink(cpsw); > clean_unregister_notifiers: > cpsw_unregister_notifiers(cpsw); > clean_cpts: > -- > 2.43.0 Reviewed-by: Aleksandr Loktionov <[email protected]>