diff options
Diffstat (limited to 'package/kernel/mac80211/patches/brcm/104-v5.4-0002-brcmfmac-change-the-order-of-things-in-brcmf_detach.patch')
-rw-r--r-- | package/kernel/mac80211/patches/brcm/104-v5.4-0002-brcmfmac-change-the-order-of-things-in-brcmf_detach.patch | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/package/kernel/mac80211/patches/brcm/104-v5.4-0002-brcmfmac-change-the-order-of-things-in-brcmf_detach.patch b/package/kernel/mac80211/patches/brcm/104-v5.4-0002-brcmfmac-change-the-order-of-things-in-brcmf_detach.patch new file mode 100644 index 0000000000..c72fa24991 --- /dev/null +++ b/package/kernel/mac80211/patches/brcm/104-v5.4-0002-brcmfmac-change-the-order-of-things-in-brcmf_detach.patch @@ -0,0 +1,66 @@ +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 +@@ -1328,25 +1328,26 @@ 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); + ++ /* 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); + } + |