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

Commit b722dbf1 authored by Julia Lawall's avatar Julia Lawall Committed by David S. Miller
Browse files

drivers/net/davinci_emac.c: add missing clk_put

Go to existing error handling code at the end of the function that calls
clk_put.

A simplified version of the semantic match that finds this problem is as
follows: (http://coccinelle.lip6.fr/

)

// <smpl>
@r exists@
expression e1,e2;
statement S;
@@

e1 = clk_get@p1(...);
... when != e1 = e2
    when != clk_put(e1)
    when any
if (...) { ... when != clk_put(e1)
               when != if (...) { ... clk_put(e1) ... }
* return@p3 ...;
 } else S
// </smpl>

Signed-off-by: default avatarJulia Lawall <julia@diku.dk>
Acked-by: default avatarKevin Hilman <khilman@ti.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent a3bcc23e
Loading
Loading
Loading
Loading
+6 −4
Original line number Original line Diff line number Diff line
@@ -1781,8 +1781,8 @@ static int __devinit davinci_emac_probe(struct platform_device *pdev)
	ndev = alloc_etherdev(sizeof(struct emac_priv));
	ndev = alloc_etherdev(sizeof(struct emac_priv));
	if (!ndev) {
	if (!ndev) {
		dev_err(&pdev->dev, "error allocating net_device\n");
		dev_err(&pdev->dev, "error allocating net_device\n");
		clk_put(emac_clk);
		rc = -ENOMEM;
		return -ENOMEM;
		goto free_clk;
	}
	}


	platform_set_drvdata(pdev, ndev);
	platform_set_drvdata(pdev, ndev);
@@ -1796,7 +1796,8 @@ static int __devinit davinci_emac_probe(struct platform_device *pdev)
	pdata = pdev->dev.platform_data;
	pdata = pdev->dev.platform_data;
	if (!pdata) {
	if (!pdata) {
		dev_err(&pdev->dev, "no platform data\n");
		dev_err(&pdev->dev, "no platform data\n");
		return -ENODEV;
		rc = -ENODEV;
		goto probe_quit;
	}
	}


	/* MAC addr and PHY mask , RMII enable info from platform_data */
	/* MAC addr and PHY mask , RMII enable info from platform_data */
@@ -1929,8 +1930,9 @@ static int __devinit davinci_emac_probe(struct platform_device *pdev)
	iounmap(priv->remap_addr);
	iounmap(priv->remap_addr);


probe_quit:
probe_quit:
	clk_put(emac_clk);
	free_netdev(ndev);
	free_netdev(ndev);
free_clk:
	clk_put(emac_clk);
	return rc;
	return rc;
}
}