brcmfmac: on halting driver check before release or free.
authorHante Meuleman <[email protected]>
Tue, 6 Nov 2012 00:22:30 +0000 (16:22 -0800)
committerJohn W. Linville <[email protected]>
Wed, 14 Nov 2012 19:56:03 +0000 (14:56 -0500)
brcmf_netdev_stop shall first check bus_if status before bringing
down cfg80211. brcmf_detach shall first check if driver is
allocated.

Reviewed-by: Arend Van Spriel <[email protected]>
Signed-off-by: Hante Meuleman <[email protected]>
Signed-off-by: Franky Lin <[email protected]>
Signed-off-by: John W. Linville <[email protected]>
drivers/net/wireless/brcm80211/brcmfmac/dhd_linux.c

index a0d8950ed5b1b95698fdee52980393967627fad3..2bb12072dbdc59b6608623debdd730805dd0ee3a 100644 (file)
@@ -600,10 +600,12 @@ static int brcmf_netdev_stop(struct net_device *ndev)
        struct brcmf_pub *drvr = ifp->drvr;
 
        brcmf_dbg(TRACE, "Enter\n");
-       brcmf_cfg80211_down(drvr->config);
+
        if (drvr->bus_if->drvr_up == 0)
                return 0;
 
+       brcmf_cfg80211_down(drvr->config);
+
        /* Set state and stop OS transmissions */
        drvr->bus_if->drvr_up = false;
        netif_stop_queue(ndev);
@@ -905,6 +907,8 @@ void brcmf_detach(struct device *dev)
 
        brcmf_dbg(TRACE, "Enter\n");
 
+       if (drvr == NULL)
+               return;
 
        /* make sure primary interface removed last */
        for (i = BRCMF_MAX_IFS-1; i > -1; i--)