diff options
Diffstat (limited to 'drivers/net/wireless/iwlwifi/iwl-agn.c')
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-agn.c | 15 |
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 | ||
3191 | static int iwl_mac_hw_scan(struct ieee80211_hw *hw, u8 *ssid, size_t ssid_len) | 3191 | static 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); |