summaryrefslogtreecommitdiff
path: root/drivers/staging/brcm80211
diff options
context:
space:
mode:
authorArend van Spriel <arend@broadcom.com>2011-08-23 14:13:57 +0200
committerGreg Kroah-Hartman <gregkh@suse.de>2011-08-23 13:10:14 -0700
commit183eeb985a2cdbf37c7850c5e8e99cc1cc26901f (patch)
tree6d41f1c842c6bdd72e97fb6ad21e1aded672c269 /drivers/staging/brcm80211
parent60be7ec5099cee40f40b0fbb75ea4396016a5231 (diff)
staging: brcm80211: fix rtnl_lock issue when bringing down brcmfmac
When bringing down the netdevice interface a deadlock occurred sporadically due to the rtnl_lock being held by a task that was waiting for another task trying to get the lock. This patch fixes that issue. Reviewed-by: Franky (Zhenhui) Lin <frankyl@broadcom.com> Reviewed-by: Roland Vossen <rvossen@broadcom.com> Signed-off-by: Arend van Spriel <arend@broadcom.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/staging/brcm80211')
-rw-r--r--drivers/staging/brcm80211/brcmfmac/wl_cfg80211.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/drivers/staging/brcm80211/brcmfmac/wl_cfg80211.c b/drivers/staging/brcm80211/brcmfmac/wl_cfg80211.c
index 6c604cf627d..80bb30a8a76 100644
--- a/drivers/staging/brcm80211/brcmfmac/wl_cfg80211.c
+++ b/drivers/staging/brcm80211/brcmfmac/wl_cfg80211.c
@@ -3189,7 +3189,14 @@ static void brcmf_term_iscan(struct brcmf_cfg80211_priv *cfg_priv)
if (cfg_priv->iscan_on && iscan->tsk) {
iscan->state = WL_ISCAN_STATE_IDLE;
send_sig(SIGTERM, iscan->tsk, 1);
+
+ /*
+ * The iscan task may want to acquire the rtnl_lock
+ * so release it here upon stopping the task.
+ */
+ rtnl_unlock();
kthread_stop(iscan->tsk);
+ rtnl_lock();
iscan->tsk = NULL;
/* Abort iscan running in FW */