diff options
author | Arend van Spriel <arend@broadcom.com> | 2013-05-27 15:09:56 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2013-05-28 13:43:09 -0400 |
commit | 9390ace916b2fd866c1762b1cd16c276d8c8c890 (patch) | |
tree | ac39894c9a5f570a2f24578d67cf167e69a44617 | |
parent | 24e28beef939df8666a5d2784d6617cd9bb910a0 (diff) |
brcmfmac: free net device when registration fails
When registration fails the net device is no longer needed. Free
the net device and remove reference to private data from the
driver.
Reviewed-by: Hante Meuleman <meuleman@broadcom.com>
Signed-off-by: Arend van Spriel <arend@broadcom.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
-rw-r--r-- | drivers/net/wireless/brcm80211/brcmfmac/dhd_linux.c | 10 | ||||
-rw-r--r-- | drivers/net/wireless/brcm80211/brcmfmac/fweh.c | 3 |
2 files changed, 9 insertions, 4 deletions
diff --git a/drivers/net/wireless/brcm80211/brcmfmac/dhd_linux.c b/drivers/net/wireless/brcm80211/brcmfmac/dhd_linux.c index 59c25463e428..f04e3555dca3 100644 --- a/drivers/net/wireless/brcm80211/brcmfmac/dhd_linux.c +++ b/drivers/net/wireless/brcm80211/brcmfmac/dhd_linux.c | |||
@@ -656,7 +656,9 @@ int brcmf_net_attach(struct brcmf_if *ifp, bool rtnl_locked) | |||
656 | return 0; | 656 | return 0; |
657 | 657 | ||
658 | fail: | 658 | fail: |
659 | drvr->iflist[ifp->bssidx] = NULL; | ||
659 | ndev->netdev_ops = NULL; | 660 | ndev->netdev_ops = NULL; |
661 | free_netdev(ndev); | ||
660 | return -EBADE; | 662 | return -EBADE; |
661 | } | 663 | } |
662 | 664 | ||
@@ -720,6 +722,9 @@ static int brcmf_net_p2p_attach(struct brcmf_if *ifp) | |||
720 | return 0; | 722 | return 0; |
721 | 723 | ||
722 | fail: | 724 | fail: |
725 | ifp->drvr->iflist[ifp->bssidx] = NULL; | ||
726 | ndev->netdev_ops = NULL; | ||
727 | free_netdev(ndev); | ||
723 | return -EBADE; | 728 | return -EBADE; |
724 | } | 729 | } |
725 | 730 | ||
@@ -925,8 +930,6 @@ fail: | |||
925 | brcmf_fws_del_interface(ifp); | 930 | brcmf_fws_del_interface(ifp); |
926 | brcmf_fws_deinit(drvr); | 931 | brcmf_fws_deinit(drvr); |
927 | } | 932 | } |
928 | free_netdev(ifp->ndev); | ||
929 | drvr->iflist[0] = NULL; | ||
930 | if (p2p_ifp) { | 933 | if (p2p_ifp) { |
931 | free_netdev(p2p_ifp->ndev); | 934 | free_netdev(p2p_ifp->ndev); |
932 | drvr->iflist[1] = NULL; | 935 | drvr->iflist[1] = NULL; |
@@ -934,7 +937,8 @@ fail: | |||
934 | return ret; | 937 | return ret; |
935 | } | 938 | } |
936 | if ((brcmf_p2p_enable) && (p2p_ifp)) | 939 | if ((brcmf_p2p_enable) && (p2p_ifp)) |
937 | brcmf_net_p2p_attach(p2p_ifp); | 940 | if (brcmf_net_p2p_attach(p2p_ifp) < 0) |
941 | brcmf_p2p_enable = 0; | ||
938 | 942 | ||
939 | return 0; | 943 | return 0; |
940 | } | 944 | } |
diff --git a/drivers/net/wireless/brcm80211/brcmfmac/fweh.c b/drivers/net/wireless/brcm80211/brcmfmac/fweh.c index 5a64280e6485..83ee53a7c76e 100644 --- a/drivers/net/wireless/brcm80211/brcmfmac/fweh.c +++ b/drivers/net/wireless/brcm80211/brcmfmac/fweh.c | |||
@@ -202,7 +202,8 @@ static void brcmf_fweh_handle_if_event(struct brcmf_pub *drvr, | |||
202 | return; | 202 | return; |
203 | brcmf_fws_add_interface(ifp); | 203 | brcmf_fws_add_interface(ifp); |
204 | if (!drvr->fweh.evt_handler[BRCMF_E_IF]) | 204 | if (!drvr->fweh.evt_handler[BRCMF_E_IF]) |
205 | err = brcmf_net_attach(ifp, false); | 205 | if (brcmf_net_attach(ifp, false) < 0) |
206 | return; | ||
206 | } | 207 | } |
207 | 208 | ||
208 | if (ifevent->action == BRCMF_E_IF_CHANGE) | 209 | if (ifevent->action == BRCMF_E_IF_CHANGE) |