]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
net: phy: fixed_phy: let fixed_phy_unregister free the phy_device
authorHeiner Kallweit <hkallweit1@gmail.com>
Sat, 23 Aug 2025 21:25:05 +0000 (23:25 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 13 Nov 2025 20:34:15 +0000 (15:34 -0500)
[ Upstream commit a0f849c1cc6df0db9083b4c81c05a5456b1ed0fb ]

fixed_phy_register() creates and registers the phy_device. To be
symmetric, we should not only unregister, but also free the phy_device
in fixed_phy_unregister(). This allows to simplify code in users.

Note wrt of_phy_deregister_fixed_link():
put_device(&phydev->mdio.dev) and phy_device_free(phydev) are identical.

Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
Reviewed-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
Link: https://patch.msgid.link/ad8dda9a-10ed-4060-916b-3f13bdbb899d@gmail.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/net/dsa/dsa_loop.c
drivers/net/mdio/of_mdio.c
drivers/net/phy/fixed_phy.c

index c70ed67cc18882e829f8ef1673bf3b6680a9c53f..5c7f40acfa391f8ac897bac74371aa01396ea440 100644 (file)
@@ -387,13 +387,10 @@ static struct mdio_driver dsa_loop_drv = {
 
 static void dsa_loop_phydevs_unregister(void)
 {
-       unsigned int i;
-
-       for (i = 0; i < NUM_FIXED_PHYS; i++)
-               if (!IS_ERR(phydevs[i])) {
+       for (int i = 0; i < NUM_FIXED_PHYS; i++) {
+               if (!IS_ERR(phydevs[i]))
                        fixed_phy_unregister(phydevs[i]);
-                       phy_device_free(phydevs[i]);
-               }
+       }
 }
 
 static int __init dsa_loop_init(void)
index 2f4fc664d2e121552998a9cf591d5db314c3ef18..cc6ae8f35b1c2c6a885324b022205f6da275a125 100644 (file)
@@ -473,6 +473,5 @@ void of_phy_deregister_fixed_link(struct device_node *np)
        fixed_phy_unregister(phydev);
 
        put_device(&phydev->mdio.dev);  /* of_phy_find_device() */
-       phy_device_free(phydev);        /* fixed_phy_register() */
 }
 EXPORT_SYMBOL(of_phy_deregister_fixed_link);
index aef739c20ac4d5a271465a677a85ef7c18cfce70..4694fb3eaa2ff8169a1ecd8c176e3e262c55edf5 100644 (file)
@@ -329,6 +329,7 @@ void fixed_phy_unregister(struct phy_device *phy)
        phy_device_remove(phy);
        of_node_put(phy->mdio.dev.of_node);
        fixed_phy_del(phy->mdio.addr);
+       phy_device_free(phy);
 }
 EXPORT_SYMBOL_GPL(fixed_phy_unregister);