]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
net: cpsw_new: unregister devlink on port registration failure
authorGuangshuo Li <lgs201920130244@gmail.com>
Thu, 4 Jun 2026 04:31:15 +0000 (12:31 +0800)
committerJakub Kicinski <kuba@kernel.org>
Sat, 6 Jun 2026 00:27:24 +0000 (17:27 -0700)
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.

Reviewed-by: Aleksandr Loktionov <aleksandr.loktionov@intel.com>
Reviewed-by: Alexander Sverdlin <alexander.sverdlin@siemens.com>
Signed-off-by: Guangshuo Li <lgs201920130244@gmail.com>
Link: https://patch.msgid.link/20260604043115.1409134-1-lgs201920130244@gmail.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/ti/cpsw_new.c

index c5be359f3c663efcb18246c0e90822d283c2b095..b6e25a4658d1aaa4a3eb07cc7388cf602b231cb8 100644 (file)
@@ -2050,7 +2050,7 @@ skip_cpts:
 
        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 @@ skip_cpts:
 
        return 0;
 
+clean_unregister_devlink:
+       cpsw_unregister_devlink(cpsw);
 clean_unregister_notifiers:
        cpsw_unregister_notifiers(cpsw);
 clean_cpts: