From: Arend van Spriel Date: Tue, 23 Aug 2011 12:13:57 +0000 (+0200) Subject: staging: brcm80211: fix rtnl_lock issue when bringing down brcmfmac X-Git-Tag: upstream/snapshot3+hdmi~8929^2^2~864^2~268 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=183eeb985a2cdbf37c7850c5e8e99cc1cc26901f;p=platform%2Fadaptation%2Frenesas_rcar%2Frenesas_kernel.git 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 Reviewed-by: Roland Vossen Signed-off-by: Arend van Spriel Signed-off-by: Greg Kroah-Hartman --- diff --git a/drivers/staging/brcm80211/brcmfmac/wl_cfg80211.c b/drivers/staging/brcm80211/brcmfmac/wl_cfg80211.c index 6c604cf..80bb30a 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 */