[PATCH 16/21] patches: brcmfmac: fix netdev destructor

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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@xxxxxxxxxx>
---
 patches/0079-netdev-destructor/brcmfmac.patch | 35 +++++++++++++++++++++++++++
 1 file changed, 35 insertions(+)
 create mode 100644 patches/0079-netdev-destructor/brcmfmac.patch

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 */
-- 
2.11.0

--
To unsubscribe from this list: send the line "unsubscribe backports" in



[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux]     [Linux OMAP]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux