[PATCH] net: hisilicon: unmap IO resources when cleanup

Sheng Yong shengyong1 at huawei.com
Fri Nov 28 17:48:10 PST 2014


Unmap IO resources if the driver initailization failed or the driver is
unmounted.

Signed-off-by: Sheng Yong <shengyong1 at huawei.com>
---
 drivers/net/ethernet/hisilicon/hix5hd2_gmac.c | 14 ++++++++++----
 1 file changed, 10 insertions(+), 4 deletions(-)

diff --git a/drivers/net/ethernet/hisilicon/hix5hd2_gmac.c b/drivers/net/ethernet/hisilicon/hix5hd2_gmac.c
index 0ffdcd3..3399ce6 100644
--- a/drivers/net/ethernet/hisilicon/hix5hd2_gmac.c
+++ b/drivers/net/ethernet/hisilicon/hix5hd2_gmac.c
@@ -917,26 +917,26 @@ static int hix5hd2_dev_probe(struct platform_device *pdev)
 	priv->ctrl_base = devm_ioremap_resource(dev, res);
 	if (IS_ERR(priv->ctrl_base)) {
 		ret = PTR_ERR(priv->ctrl_base);
-		goto out_free_netdev;
+		goto out_base;
 	}
 
 	priv->clk = devm_clk_get(&pdev->dev, NULL);
 	if (IS_ERR(priv->clk)) {
 		netdev_err(ndev, "failed to get clk\n");
 		ret = -ENODEV;
-		goto out_free_netdev;
+		goto out_ctrl_base;
 	}
 
 	ret = clk_prepare_enable(priv->clk);
 	if (ret < 0) {
 		netdev_err(ndev, "failed to enable clk %d\n", ret);
-		goto out_free_netdev;
+		goto out_ctrl_base;
 	}
 
 	bus = mdiobus_alloc();
 	if (bus == NULL) {
 		ret = -ENOMEM;
-		goto out_free_netdev;
+		goto out_ctrl_base;
 	}
 
 	bus->priv = priv;
@@ -1019,6 +1019,10 @@ err_mdiobus:
 	mdiobus_unregister(bus);
 err_free_mdio:
 	mdiobus_free(bus);
+out_base:
+        iounmap(priv->base);
+out_ctrl_base:
+	iounmap(priv->ctrl_base);
 out_free_netdev:
 	free_netdev(ndev);
 
@@ -1038,6 +1042,8 @@ static int hix5hd2_dev_remove(struct platform_device *pdev)
 	hix5hd2_destroy_hw_desc_queue(priv);
 	of_node_put(priv->phy_node);
 	cancel_work_sync(&priv->tx_timeout_task);
+	iounmap(priv->base);
+	iounmap(priv->ctrl_base);
 	free_netdev(ndev);
 
 	return 0;
-- 
1.8.3.4




More information about the linux-arm-kernel mailing list