CHROMIUM: mwifiex: cancel pending scan commands if scan is already aborted
authorBing Zhao <bzhao@marvell.com>
Sat, 13 Oct 2012 00:48:28 +0000 (17:48 -0700)
committerGerrit <chrome-bot@google.com>
Sat, 13 Oct 2012 21:52:09 +0000 (14:52 -0700)
The scan could be aborted by cfg80211 core.c.
Driver should not send any pending scan commands to firmware.

Signed-off-by: Bing Zhao <bzhao@marvell.com>
Signed-off-by: Paul Stewart <pstew@chromium.org>
BUG=chrome-os-partner:15087
TEST=On Wi-Fi Network Settings, enable Wi-Fi and connect to AP,
then disable Wi-Fi. Repeat above test multiple time.
Turn on driver debug and verify the pending scan commands are
cancelled after scan is aborted by cfg80211.

Change-Id: I8d27266bbda150d34ac442149030c8cfd4e663ab
Reviewed-on: https://gerrit.chromium.org/gerrit/35500
Reviewed-by: Ryan Cairns <rtc@chromium.org>
Commit-Ready: Paul Stewart <pstew@chromium.org>
Reviewed-by: Paul Stewart <pstew@chromium.org>
Tested-by: Paul Stewart <pstew@chromium.org>
drivers/net/wireless/mwifiex/scan.c

index a7d71a5..62179e3 100644 (file)
@@ -1761,8 +1761,16 @@ int mwifiex_ret_802_11_scan(struct mwifiex_private *priv,
                        priv->user_scan_cfg = NULL;
                }
        } else {
-               if (!mwifiex_wmm_lists_empty(adapter) &&
-                   (priv->scan_request && (priv->scan_request->flags &
+               if (priv->scan_request && priv->scan_request->aborted) {
+                       spin_unlock_irqrestore(&adapter->scan_pending_q_lock,
+                                              flags);
+                       adapter->scan_delay_cnt = MWIFIEX_MAX_SCAN_DELAY_CNT;
+                       mod_timer(&priv->scan_delay_timer, jiffies +
+                                 msecs_to_jiffies(MWIFIEX_SCAN_DELAY_MSEC));
+                       dev_dbg(priv->adapter->dev,
+                               "info: %s: triggerring scan abort\n", __func__);
+               } else if (!mwifiex_wmm_lists_empty(adapter) &&
+                          (priv->scan_request && (priv->scan_request->flags &
                                            CFG80211_SCAN_FLAG_TX_ABORT))) {
                        spin_unlock_irqrestore(&adapter->scan_pending_q_lock,
                                               flags);