|
@@ -1768,16 +1768,29 @@ int mwifiex_ret_802_11_scan(struct mwifiex_private *priv,
|
|
|
}
|
|
|
|
|
|
if (priv->user_scan_cfg) {
|
|
|
- dev_dbg(priv->adapter->dev,
|
|
|
- "info: %s: sending scan results\n", __func__);
|
|
|
- cfg80211_scan_done(priv->scan_request, 0);
|
|
|
- priv->scan_request = NULL;
|
|
|
+ if (priv->scan_request) {
|
|
|
+ dev_dbg(priv->adapter->dev,
|
|
|
+ "info: notifying scan done\n");
|
|
|
+ cfg80211_scan_done(priv->scan_request, 0);
|
|
|
+ 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;
|
|
|
}
|
|
|
} else {
|
|
|
- if (!mwifiex_wmm_lists_empty(adapter) &&
|
|
|
- (priv->scan_request && (priv->scan_request->flags &
|
|
|
+ if (priv->user_scan_cfg && !priv->scan_request) {
|
|
|
+ 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);
|
|
|
+ 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 &
|
|
|
NL80211_SCAN_FLAG_LOW_PRIORITY))) {
|
|
|
spin_unlock_irqrestore(&adapter->scan_pending_q_lock,
|
|
|
flags);
|