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) |
