|
|
@@ -784,17 +784,17 @@ static void brcmf_del_if(struct brcmf_pub *drvr, s32 bsscfgidx,
|
|
|
bool rtnl_locked)
|
|
|
{
|
|
|
struct brcmf_if *ifp;
|
|
|
+ int ifidx;
|
|
|
|
|
|
ifp = drvr->iflist[bsscfgidx];
|
|
|
- drvr->iflist[bsscfgidx] = NULL;
|
|
|
if (!ifp) {
|
|
|
brcmf_err("Null interface, bsscfgidx=%d\n", bsscfgidx);
|
|
|
return;
|
|
|
}
|
|
|
brcmf_dbg(TRACE, "Enter, bsscfgidx=%d, ifidx=%d\n", bsscfgidx,
|
|
|
ifp->ifidx);
|
|
|
- if (drvr->if2bss[ifp->ifidx] == bsscfgidx)
|
|
|
- drvr->if2bss[ifp->ifidx] = BRCMF_BSSIDX_INVALID;
|
|
|
+ ifidx = ifp->ifidx;
|
|
|
+
|
|
|
if (ifp->ndev) {
|
|
|
if (bsscfgidx == 0) {
|
|
|
if (ifp->ndev->netdev_ops == &brcmf_netdev_ops_pri) {
|
|
|
@@ -822,6 +822,10 @@ static void brcmf_del_if(struct brcmf_pub *drvr, s32 bsscfgidx,
|
|
|
brcmf_p2p_ifp_removed(ifp, rtnl_locked);
|
|
|
kfree(ifp);
|
|
|
}
|
|
|
+
|
|
|
+ drvr->iflist[bsscfgidx] = NULL;
|
|
|
+ if (drvr->if2bss[ifidx] == bsscfgidx)
|
|
|
+ drvr->if2bss[ifidx] = BRCMF_BSSIDX_INVALID;
|
|
|
}
|
|
|
|
|
|
void brcmf_remove_interface(struct brcmf_if *ifp, bool rtnl_locked)
|