RE: [PATCH] net: cpsw_new: unregister devlink on port registration failure

From: Loktionov, Aleksandr

Date: Wed Jun 03 2026 - 11:03:12 EST




> -----Original Message-----
> From: Guangshuo Li <lgs201920130244@xxxxxxxxx>
> Sent: Wednesday, June 3, 2026 4:08 PM
> To: Siddharth Vadapalli <s-vadapalli@xxxxxx>; Roger Quadros
> <rogerq@xxxxxxxxxx>; Andrew Lunn <andrew+netdev@xxxxxxx>; David S.
> Miller <davem@xxxxxxxxxxxxx>; Eric Dumazet <edumazet@xxxxxxxxxx>;
> Jakub Kicinski <kuba@xxxxxxxxxx>; Paolo Abeni <pabeni@xxxxxxxxxx>;
> Kevin Hao <haokexin@xxxxxxxxx>; Alexander Sverdlin
> <alexander.sverdlin@xxxxxxxxx>; Loktionov, Aleksandr
> <aleksandr.loktionov@xxxxxxxxx>; Daniel Zahka
> <daniel.zahka@xxxxxxxxx>; Guangshuo Li <lgs201920130244@xxxxxxxxx>;
> Ilias Apalodimas <ilias.apalodimas@xxxxxxxxxx>; Murali Karicheri <m-
> karicheri2@xxxxxx>; Grygorii Strashko <grygorii.strashko@xxxxxx>;
> linux-omap@xxxxxxxxxxxxxxx; netdev@xxxxxxxxxxxxxxx; linux-
> kernel@xxxxxxxxxxxxxxx
> 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 <lgs201920130244@xxxxxxxxx>
> ---
> 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 <aleksandr.loktionov@xxxxxxxxx>