aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/iwlwifi/iwl-agn.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/wireless/iwlwifi/iwl-agn.c')
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-agn.c15
1 files changed, 11 insertions, 4 deletions
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn.c b/drivers/net/wireless/iwlwifi/iwl-agn.c
index d069549a01c2..7330890fd05e 100644
--- a/drivers/net/wireless/iwlwifi/iwl-agn.c
+++ b/drivers/net/wireless/iwlwifi/iwl-agn.c
@@ -3190,9 +3190,9 @@ static void iwl4965_bss_info_changed(struct ieee80211_hw *hw,
3190 3190
3191static int iwl_mac_hw_scan(struct ieee80211_hw *hw, u8 *ssid, size_t ssid_len) 3191static int iwl_mac_hw_scan(struct ieee80211_hw *hw, u8 *ssid, size_t ssid_len)
3192{ 3192{
3193 int ret;
3194 unsigned long flags; 3193 unsigned long flags;
3195 struct iwl_priv *priv = hw->priv; 3194 struct iwl_priv *priv = hw->priv;
3195 int ret;
3196 3196
3197 IWL_DEBUG_MAC80211("enter\n"); 3197 IWL_DEBUG_MAC80211("enter\n");
3198 3198
@@ -3211,20 +3211,27 @@ static int iwl_mac_hw_scan(struct ieee80211_hw *hw, u8 *ssid, size_t ssid_len)
3211 goto out_unlock; 3211 goto out_unlock;
3212 } 3212 }
3213 3213
3214 /* we don't schedule scan within next_scan_jiffies period */ 3214 /* We don't schedule scan within next_scan_jiffies period.
3215 * Avoid scanning during possible EAPOL exchange, return
3216 * success immediately.
3217 */
3215 if (priv->next_scan_jiffies && 3218 if (priv->next_scan_jiffies &&
3216 time_after(priv->next_scan_jiffies, jiffies)) { 3219 time_after(priv->next_scan_jiffies, jiffies)) {
3217 IWL_DEBUG_SCAN("scan rejected: within next scan period\n"); 3220 IWL_DEBUG_SCAN("scan rejected: within next scan period\n");
3218 ret = -EAGAIN; 3221 queue_work(priv->workqueue, &priv->scan_completed);
3222 ret = 0;
3219 goto out_unlock; 3223 goto out_unlock;
3220 } 3224 }
3225
3221 /* if we just finished scan ask for delay */ 3226 /* if we just finished scan ask for delay */
3222 if (iwl_is_associated(priv) && priv->last_scan_jiffies && 3227 if (iwl_is_associated(priv) && priv->last_scan_jiffies &&
3223 time_after(priv->last_scan_jiffies + IWL_DELAY_NEXT_SCAN, jiffies)) { 3228 time_after(priv->last_scan_jiffies + IWL_DELAY_NEXT_SCAN, jiffies)) {
3224 IWL_DEBUG_SCAN("scan rejected: within previous scan period\n"); 3229 IWL_DEBUG_SCAN("scan rejected: within previous scan period\n");
3225 ret = -EAGAIN; 3230 queue_work(priv->workqueue, &priv->scan_completed);
3231 ret = 0;
3226 goto out_unlock; 3232 goto out_unlock;
3227 } 3233 }
3234
3228 if (ssid_len) { 3235 if (ssid_len) {
3229 priv->one_direct_scan = 1; 3236 priv->one_direct_scan = 1;
3230 priv->direct_ssid_len = min_t(u8, ssid_len, IW_ESSID_MAX_SIZE); 3237 priv->direct_ssid_len = min_t(u8, ssid_len, IW_ESSID_MAX_SIZE);