net: dsa: sja1105: allow XPCS to handle mdiodev lifetime
authorRussell King (Oracle) <rmk+kernel@armlinux.org.uk>
Fri, 2 Jun 2023 13:58:35 +0000 (14:58 +0100)
committerDavid S. Miller <davem@davemloft.net>
Mon, 5 Jun 2023 10:26:02 +0000 (11:26 +0100)
Put the mdiodev after xpcs_create() so that the XPCS driver can manage
the lifetime of the mdiodev its using.

Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
Reviewed-by: Vladimir Oltean <vladimir.oltean@nxp.com>
Tested-by: Vladimir Oltean <vladimir.oltean@nxp.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/dsa/sja1105/sja1105_mdio.c

index 01f1cb7..166fe74 100644 (file)
@@ -417,6 +417,7 @@ static int sja1105_mdiobus_pcs_register(struct sja1105_private *priv)
                }
 
                xpcs = xpcs_create(mdiodev, priv->phy_mode[port]);
+               mdio_device_put(mdiodev);
                if (IS_ERR(xpcs)) {
                        rc = PTR_ERR(xpcs);
                        goto out_pcs_free;
@@ -434,7 +435,6 @@ out_pcs_free:
                if (!priv->xpcs[port])
                        continue;
 
-               mdio_device_free(priv->xpcs[port]->mdiodev);
                xpcs_destroy(priv->xpcs[port]);
                priv->xpcs[port] = NULL;
        }
@@ -457,7 +457,6 @@ static void sja1105_mdiobus_pcs_unregister(struct sja1105_private *priv)
                if (!priv->xpcs[port])
                        continue;
 
-               mdio_device_free(priv->xpcs[port]->mdiodev);
                xpcs_destroy(priv->xpcs[port]);
                priv->xpcs[port] = NULL;
        }