net: qcom/emac: fix double free of SGMII IRQ during shutdown
authorTimur Tabi <timur@codeaurora.org>
Thu, 13 Jul 2017 20:45:41 +0000 (15:45 -0500)
committerDavid S. Miller <davem@davemloft.net>
Fri, 14 Jul 2017 15:55:32 +0000 (08:55 -0700)
If the interface is not up, then don't try to close it during a
shutdown.  This avoids possible double free of the IRQ, which
can happen during a shutdown.

Fixes: 03eb3eb4d4d5 ("net: qcom/emac: add shutdown function")
Signed-off-by: Timur Tabi <timur@codeaurora.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/qualcomm/emac/emac.c

index 746d94e28470f74a1b0e546fbce0eac6b344a281..60850bfa3d32e5d574bddacda871cb75da2076fd 100644 (file)
@@ -766,11 +766,13 @@ static void emac_shutdown(struct platform_device *pdev)
        struct emac_adapter *adpt = netdev_priv(netdev);
        struct emac_sgmii *sgmii = &adpt->phy;
 
-       /* Closing the SGMII turns off its interrupts */
-       sgmii->close(adpt);
+       if (netdev->flags & IFF_UP) {
+               /* Closing the SGMII turns off its interrupts */
+               sgmii->close(adpt);
 
-       /* Resetting the MAC turns off all DMA and its interrupts */
-       emac_mac_reset(adpt);
+               /* Resetting the MAC turns off all DMA and its interrupts */
+               emac_mac_reset(adpt);
+       }
 }
 
 static struct platform_driver emac_platform_driver = {