fec: Fix fec_enet_alloc_buffers() error path
authorFabio Estevam <fabio.estevam@freescale.com>
Sat, 4 Oct 2014 16:40:01 +0000 (13:40 -0300)
committerDavid S. Miller <davem@davemloft.net>
Mon, 6 Oct 2014 04:53:56 +0000 (00:53 -0400)
When fec_enet_alloc_buffers() fails we should better undo the previous actions,
which consists of: disabling the FEC clocks and putting the FEC pins into
inactive state.

The error path for fec_enet_mii_probe() is kept unchanged.

Signed-off-by: Fabio Estevam <fabio.estevam@freescale.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/freescale/fec_main.c

index e190eb0ed006e7b6b6ff1970c706351a26f08b62..87975b5dda94674e93e5c3297a88da21beda5588 100644 (file)
@@ -2747,16 +2747,12 @@ fec_enet_open(struct net_device *ndev)
 
        ret = fec_enet_alloc_buffers(ndev);
        if (ret)
-               return ret;
+               goto err_enet_alloc;
 
        /* Probe and connect to PHY when open the interface */
        ret = fec_enet_mii_probe(ndev);
-       if (ret) {
-               fec_enet_free_buffers(ndev);
-               fec_enet_clk_enable(ndev, false);
-               pinctrl_pm_select_sleep_state(&fep->pdev->dev);
-               return ret;
-       }
+       if (ret)
+               goto err_enet_mii_probe;
 
        fec_restart(ndev);
        napi_enable(&fep->napi);
@@ -2764,6 +2760,13 @@ fec_enet_open(struct net_device *ndev)
        netif_tx_start_all_queues(ndev);
 
        return 0;
+
+err_enet_mii_probe:
+       fec_enet_free_buffers(ndev);
+err_enet_alloc:
+       fec_enet_clk_enable(ndev, false);
+       pinctrl_pm_select_sleep_state(&fep->pdev->dev);
+       return ret;
 }
 
 static int