summaryrefslogtreecommitdiffstats
path: root/package/kernel/mac80211/patches/352-v5.4-0002-brcmfmac-change-the-order-of-things-in-brcmf_detach.patch
diff options
context:
space:
mode:
Diffstat (limited to 'package/kernel/mac80211/patches/352-v5.4-0002-brcmfmac-change-the-order-of-things-in-brcmf_detach.patch')
-rw-r--r--package/kernel/mac80211/patches/352-v5.4-0002-brcmfmac-change-the-order-of-things-in-brcmf_detach.patch68
1 files changed, 68 insertions, 0 deletions
diff --git a/package/kernel/mac80211/patches/352-v5.4-0002-brcmfmac-change-the-order-of-things-in-brcmf_detach.patch b/package/kernel/mac80211/patches/352-v5.4-0002-brcmfmac-change-the-order-of-things-in-brcmf_detach.patch
new file mode 100644
index 0000000000..be140854a9
--- /dev/null
+++ b/package/kernel/mac80211/patches/352-v5.4-0002-brcmfmac-change-the-order-of-things-in-brcmf_detach.patch
@@ -0,0 +1,68 @@
+From 701fb69f2c36cba83583990e67a3925f920fd96a Mon Sep 17 00:00:00 2001
+From: Arend van Spriel <arend.vanspriel@broadcom.com>
+Date: Thu, 11 Jul 2019 11:05:07 +0200
+Subject: [PATCH 2/7] brcmfmac: change the order of things in brcmf_detach()
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+When brcmf_detach() from the bus layer upon rmmod we can no longer
+communicate. Hence we will set the bus state to DOWN and cleanup
+the event and protocol layer. The network interfaces need to be
+deleted before brcmf_cfg80211_detach() because the latter does the
+wiphy_unregister() which issues a warning if there are still network
+devices linked to the wiphy instance.
+
+Reviewed-by: Hante Meuleman <hante.meuleman@broadcom.com>
+Reviewed-by: Pieter-Paul Giesberts <pieter-paul.giesberts@broadcom.com>
+Reviewed-by: Franky Lin <franky.lin@broadcom.com>
+Signed-off-by: Arend van Spriel <arend.vanspriel@broadcom.com>
+Tested-by: Rafał Miłecki <rafal@milecki.pl>
+---
+ .../broadcom/brcm80211/brcmfmac/core.c | 27 ++++++++++---------
+ 1 file changed, 14 insertions(+), 13 deletions(-)
+
+--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
+@@ -1287,26 +1287,27 @@ void brcmf_detach(struct device *dev)
+ unregister_inet6addr_notifier(&drvr->inet6addr_notifier);
+ #endif
+
+- /* stop firmware event handling */
+- brcmf_fweh_detach(drvr);
+- if (drvr->config)
+- brcmf_p2p_detach(&drvr->config->p2p);
+-
+ brcmf_bus_change_state(bus_if, BRCMF_BUS_DOWN);
+-
+- /* make sure primary interface removed last */
+- for (i = BRCMF_MAX_IFS-1; i > -1; i--)
+- brcmf_remove_interface(drvr->iflist[i], false);
+-
+- brcmf_cfg80211_detach(drvr->config);
+- drvr->config = NULL;
+-
+ brcmf_bus_stop(drvr->bus_if);
+
++ brcmf_fweh_detach(drvr);
+ brcmf_proto_detach(drvr);
+-
+ brcmf_debug_detach(drvr);
++
++ /* make sure primary interface removed last */
++ for (i = BRCMF_MAX_IFS - 1; i > -1; i--) {
++ if (drvr->iflist[i])
++ brcmf_del_if(drvr, drvr->iflist[i]->bsscfgidx, false);
++ }
++
++ if (drvr->config) {
++ brcmf_p2p_detach(&drvr->config->p2p);
++ brcmf_cfg80211_detach(drvr->config);
++ drvr->config = NULL;
++ }
++
+ bus_if->drvr = NULL;
++
+ wiphy_free(drvr->wiphy);
+ }
+