Add cleanup for failure paths in qcom_ethqos_serdes_powerup(). This was missing calling phy_exit() and phy_power_off() at appropriate failure points. Signed-off-by: Russell King (Oracle) --- .../net/ethernet/stmicro/stmmac/dwmac-qcom-ethqos.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac-qcom-ethqos.c b/drivers/net/ethernet/stmicro/stmmac/dwmac-qcom-ethqos.c index 869f924f3cde..af8204c0e188 100644 --- a/drivers/net/ethernet/stmicro/stmmac/dwmac-qcom-ethqos.c +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-qcom-ethqos.c @@ -659,10 +659,18 @@ static int qcom_ethqos_serdes_powerup(struct net_device *ndev, void *priv) return ret; ret = phy_power_on(ethqos->serdes_phy); - if (ret) + if (ret) { + phy_exit(ethqos->serdes_phy); return ret; + } - return phy_set_speed(ethqos->serdes_phy, ethqos->serdes_speed); + ret = phy_set_speed(ethqos->serdes_phy, ethqos->serdes_speed); + if (ret) { + phy_power_off(ethqos->serdes_phy); + phy_exit(ethqos->serdes_phy); + } + + return ret; } static void qcom_ethqos_serdes_powerdown(struct net_device *ndev, void *priv) -- 2.47.3