diff options
author | Hauke Mehrtens <hauke@hauke-m.de> | 2017-08-22 00:28:12 +0200 |
---|---|---|
committer | Johannes Berg <johannes.berg@intel.com> | 2017-09-08 15:23:03 +0200 |
commit | 7c827d5ac9c18d9c069af3b4a7f820a69c23da3d (patch) | |
tree | 0741adda4ce75e99afdec569d14dfc73e3008fc2 /patches | |
parent | 901f2192a8d6efef2d8494b4e2bae48031fc1858 (diff) |
patches: brcmfmac: fix netdev destructor
brcmfmac uses a complicated netdev destructor handling. The
brcmf_net_attach() function just adds a normal destructor and later the
brcmf_add_if() function sets the needs_free_netdev callback.
The normal spatch was not applied correctly to this file, add a patch
before to try to fx this problem manually.
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Diffstat (limited to 'patches')
-rw-r--r-- | patches/0079-netdev-destructor/brcmfmac.patch | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/patches/0079-netdev-destructor/brcmfmac.patch b/patches/0079-netdev-destructor/brcmfmac.patch new file mode 100644 index 00000000..3f328b26 --- /dev/null +++ b/patches/0079-netdev-destructor/brcmfmac.patch @@ -0,0 +1,35 @@ +diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c +index b5a561b..6f5466f 100644 +--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c ++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c +@@ -462,6 +462,18 @@ static const struct net_device_ops brcmf_netdev_ops_pri = { + .ndo_set_rx_mode = brcmf_netdev_set_multicast_list + }; + ++#undef netdev_set_priv_destructor ++#define netdev_set_priv_destructor(_dev, _destructor) \ ++ (_dev)->destructor = _destructor ++ ++#if LINUX_VERSION_IS_LESS(4,12,0) ++static void __brcmf_cfg80211_free_netdev(struct net_device *ndev) ++{ ++ brcmf_cfg80211_free_netdev(ndev); ++ free_netdev(ndev); ++} ++#endif ++ + int brcmf_net_attach(struct brcmf_if *ifp, bool rtnl_locked) + { + struct brcmf_pub *drvr = ifp->drvr; +@@ -634,7 +646,11 @@ struct brcmf_if *brcmf_add_if(struct brcmf_pub *drvr, s32 bsscfgidx, s32 ifidx, + if (!ndev) + return ERR_PTR(-ENOMEM); + ++#if LINUX_VERSION_IS_LESS(4,12,0) ++ ndev->priv_destructor = __brcmf_cfg80211_free_netdev; ++#else + ndev->needs_free_netdev = true; ++#endif + ifp = netdev_priv(ndev); + ifp->ndev = ndev; + /* store mapping ifidx to bsscfgidx */ |