summaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/mwifiex/init.c
diff options
context:
space:
mode:
authorAmitkumar Karwar2012-10-20 04:19:16 +0200
committerJohn W. Linville2012-10-29 20:20:33 +0100
commitf162cac83ba474eb71ea2aa7788bd77f1692f4d2 (patch)
treeef9e5af7642d0e390aa6267bc350a0fb7b7e5e51 /drivers/net/wireless/mwifiex/init.c
parentmwifiex: use LOW_PRIORITY scan flag provided in scan request (diff)
downloadkernel-qcow2-linux-f162cac83ba474eb71ea2aa7788bd77f1692f4d2.tar.gz
kernel-qcow2-linux-f162cac83ba474eb71ea2aa7788bd77f1692f4d2.tar.xz
kernel-qcow2-linux-f162cac83ba474eb71ea2aa7788bd77f1692f4d2.zip
mwifiex: abort scan upon interface down
When the interface is down, we will abort scan by calling cfg80211_scan_done() with abort option. This fixes WARN_ON triggered by cfg80211 in wdev_cleanup_work(). Driver's internal variables/flags are cleared once we get response for current scan command. Meanwhile we will block new scan request from cfg80211. Signed-off-by: Amitkumar Karwar <akarwar@marvell.com> Signed-off-by: Bing Zhao <bzhao@marvell.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/mwifiex/init.c')
-rw-r--r--drivers/net/wireless/mwifiex/init.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/drivers/net/wireless/mwifiex/init.c b/drivers/net/wireless/mwifiex/init.c
index b5d37a8caa09..37f2d957bbf0 100644
--- a/drivers/net/wireless/mwifiex/init.c
+++ b/drivers/net/wireless/mwifiex/init.c
@@ -84,10 +84,16 @@ static void scan_delay_timer_fn(unsigned long data)
spin_unlock_irqrestore(&adapter->mwifiex_cmd_lock, flags);
if (priv->user_scan_cfg) {
- dev_dbg(priv->adapter->dev,
- "info: %s: scan aborted\n", __func__);
- cfg80211_scan_done(priv->scan_request, 1);
- priv->scan_request = NULL;
+ if (priv->scan_request) {
+ dev_dbg(priv->adapter->dev,
+ "info: aborting scan\n");
+ cfg80211_scan_done(priv->scan_request, 1);
+ priv->scan_request = NULL;
+ } else {
+ dev_dbg(priv->adapter->dev,
+ "info: scan already aborted\n");
+ }
+
kfree(priv->user_scan_cfg);
priv->user_scan_cfg = NULL;
}