net: phy: xgene: disable clk on error paths
There are several error paths in xgene_mdio_probe(), where clk is left undisabled. The patch fixes them. Found by Linux Driver Verification project (linuxtesting.org). Signed-off-by: Alexey Khoroshilov <khoroshilov@ispras.ru> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
6623c0fba1
commit
ab14436065
|
@ -194,8 +194,11 @@ static int xgene_mdio_reset(struct xgene_mdio_pdata *pdata)
|
|||
}
|
||||
|
||||
ret = xgene_enet_ecc_init(pdata);
|
||||
if (ret)
|
||||
if (ret) {
|
||||
if (pdata->dev->of_node)
|
||||
clk_disable_unprepare(pdata->clk);
|
||||
return ret;
|
||||
}
|
||||
xgene_gmac_reset(pdata);
|
||||
|
||||
return 0;
|
||||
|
@ -388,8 +391,10 @@ static int xgene_mdio_probe(struct platform_device *pdev)
|
|||
return ret;
|
||||
|
||||
mdio_bus = mdiobus_alloc();
|
||||
if (!mdio_bus)
|
||||
return -ENOMEM;
|
||||
if (!mdio_bus) {
|
||||
ret = -ENOMEM;
|
||||
goto out_clk;
|
||||
}
|
||||
|
||||
mdio_bus->name = "APM X-Gene MDIO bus";
|
||||
|
||||
|
@ -418,7 +423,7 @@ static int xgene_mdio_probe(struct platform_device *pdev)
|
|||
mdio_bus->phy_mask = ~0;
|
||||
ret = mdiobus_register(mdio_bus);
|
||||
if (ret)
|
||||
goto out;
|
||||
goto out_mdiobus;
|
||||
|
||||
acpi_walk_namespace(ACPI_TYPE_DEVICE, ACPI_HANDLE(dev), 1,
|
||||
acpi_register_phy, NULL, mdio_bus, NULL);
|
||||
|
@ -426,16 +431,20 @@ static int xgene_mdio_probe(struct platform_device *pdev)
|
|||
}
|
||||
|
||||
if (ret)
|
||||
goto out;
|
||||
goto out_mdiobus;
|
||||
|
||||
pdata->mdio_bus = mdio_bus;
|
||||
xgene_mdio_status = true;
|
||||
|
||||
return 0;
|
||||
|
||||
out:
|
||||
out_mdiobus:
|
||||
mdiobus_free(mdio_bus);
|
||||
|
||||
out_clk:
|
||||
if (dev->of_node)
|
||||
clk_disable_unprepare(pdata->clk);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue