brcmfmac: use custom destructor callback for all netdevice interfaces
The destructor for net devices was set to free_netdev() to get rid of it and the private data. The private data refers to a brcmf_if instance, but indirectly it also refers to brcmf_cfg80211_vif which holds the wdev. This is freed as well by using a new custom destructor called brcmf_cfg80211_free_netdev(). Reviewed-by: Hante Meuleman <meuleman@broadcom.com> Reviewed-by: Pieter-Paul Giesberts <pieterpg@broadcom.com> Signed-off-by: Arend van Spriel <arend@broadcom.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
parent
e14799514d
commit
9df4d542fc
|
@ -702,7 +702,7 @@ int brcmf_net_attach(struct brcmf_if *ifp, bool rtnl_locked)
|
|||
|
||||
brcmf_dbg(INFO, "%s: Broadcom Dongle Host Driver\n", ndev->name);
|
||||
|
||||
ndev->destructor = free_netdev;
|
||||
ndev->destructor = brcmf_cfg80211_free_netdev;
|
||||
return 0;
|
||||
|
||||
fail:
|
||||
|
|
|
@ -2240,23 +2240,6 @@ static void brcmf_p2p_delete_p2pdev(struct brcmf_p2p_info *p2p,
|
|||
brcmf_free_vif(vif);
|
||||
}
|
||||
|
||||
/**
|
||||
* brcmf_p2p_free_p2p_if() - free up net device related data.
|
||||
*
|
||||
* @ndev: net device that needs to be freed.
|
||||
*/
|
||||
static void brcmf_p2p_free_p2p_if(struct net_device *ndev)
|
||||
{
|
||||
struct brcmf_cfg80211_vif *vif;
|
||||
struct brcmf_if *ifp;
|
||||
|
||||
ifp = netdev_priv(ndev);
|
||||
vif = ifp->vif;
|
||||
|
||||
brcmf_free_vif(vif);
|
||||
free_netdev(ifp->ndev);
|
||||
}
|
||||
|
||||
/**
|
||||
* brcmf_p2p_add_vif() - create a new P2P virtual interface.
|
||||
*
|
||||
|
@ -2334,8 +2317,6 @@ struct wireless_dev *brcmf_p2p_add_vif(struct wiphy *wiphy, const char *name,
|
|||
brcmf_err("Registering netdevice failed\n");
|
||||
goto fail;
|
||||
}
|
||||
/* override destructor */
|
||||
ifp->ndev->destructor = brcmf_p2p_free_p2p_if;
|
||||
|
||||
cfg->p2p.bss_idx[P2PAPI_BSSCFG_CONNECTION].vif = vif;
|
||||
/* Disable firmware roaming for P2P interface */
|
||||
|
|
|
@ -4385,6 +4385,18 @@ void brcmf_free_vif(struct brcmf_cfg80211_vif *vif)
|
|||
kfree(vif);
|
||||
}
|
||||
|
||||
void brcmf_cfg80211_free_netdev(struct net_device *ndev)
|
||||
{
|
||||
struct brcmf_cfg80211_vif *vif;
|
||||
struct brcmf_if *ifp;
|
||||
|
||||
ifp = netdev_priv(ndev);
|
||||
vif = ifp->vif;
|
||||
|
||||
brcmf_free_vif(vif);
|
||||
free_netdev(ndev);
|
||||
}
|
||||
|
||||
static bool brcmf_is_linkup(const struct brcmf_event_msg *e)
|
||||
{
|
||||
u32 event = e->event_code;
|
||||
|
|
|
@ -505,5 +505,6 @@ s32 brcmf_notify_escan_complete(struct brcmf_cfg80211_info *cfg,
|
|||
bool fw_abort);
|
||||
void brcmf_set_mpc(struct brcmf_if *ndev, int mpc);
|
||||
void brcmf_abort_scanning(struct brcmf_cfg80211_info *cfg);
|
||||
void brcmf_cfg80211_free_netdev(struct net_device *ndev);
|
||||
|
||||
#endif /* _wl_cfg80211_h_ */
|
||||
|
|
Loading…
Reference in New Issue