From b55dd9be3f9eccf5e9496ab649f302da8d7fe3af Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= Date: Sun, 21 Jul 2019 23:09:53 +0200 Subject: mac80211: brcmfmac: backport fixes from kernel 5.4 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This fixes: 1) Crash during USB disconnect 2) Crash in brcmf_txfinalize() on rmmod with packets queued 3) Some errors in exit path Signed-off-by: Rafał Miłecki (cherry picked from commit 8231f67218e584be61d32b24bd17cc55e500638c) --- ...hange-the-order-of-things-in-brcmf_detach.patch | 68 ++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 package/kernel/mac80211/patches/352-v5.4-0002-brcmfmac-change-the-order-of-things-in-brcmf_detach.patch (limited to 'package/kernel/mac80211/patches/352-v5.4-0002-brcmfmac-change-the-order-of-things-in-brcmf_detach.patch') 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 +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 +Reviewed-by: Pieter-Paul Giesberts +Reviewed-by: Franky Lin +Signed-off-by: Arend van Spriel +Tested-by: Rafał Miłecki +--- + .../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); + } + -- cgit v1.2.3