Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2a9ee696 authored by Branislav Radocaj's avatar Branislav Radocaj Committed by David S. Miller
Browse files

net: ethernet: arc: fix error handling in emac_rockchip_probe



If clk_set_rate() fails, we should disable clk before return.
Found by Linux Driver Verification project (linuxtesting.org).

Changes since v2 [1]:
* Merged with latest code changes

Changes since v1:
Update made thanks to David's review, much appreciated David.
* Improved inconsistent failure handling of clock rate setting
* For completeness of usecase, added arc_emac_probe error handling

Signed-off-by: default avatarBranislav Radocaj <branislav@radocaj.org>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent aceef61e
Loading
Loading
Loading
Loading
+7 −3
Original line number Diff line number Diff line
@@ -199,9 +199,11 @@ static int emac_rockchip_probe(struct platform_device *pdev)

	/* RMII interface needs always a rate of 50MHz */
	err = clk_set_rate(priv->refclk, 50000000);
	if (err)
	if (err) {
		dev_err(dev,
			"failed to change reference clock rate (%d)\n", err);
		goto out_regulator_disable;
	}

	if (priv->soc_data->need_div_macclk) {
		priv->macclk = devm_clk_get(dev, "macclk");
@@ -230,11 +232,13 @@ static int emac_rockchip_probe(struct platform_device *pdev)
	err = arc_emac_probe(ndev, interface);
	if (err) {
		dev_err(dev, "failed to probe arc emac (%d)\n", err);
		goto out_regulator_disable;
		goto out_clk_disable_macclk;
	}

	return 0;

out_clk_disable_macclk:
	if (priv->soc_data->need_div_macclk)
		clk_disable_unprepare(priv->macclk);
out_regulator_disable:
	if (priv->regulator)