summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStanislaw Gruszka2010-10-22 17:04:30 +0200
committerJohn W. Linville2010-11-15 19:24:30 +0100
commit3eb9616af24d6a1910ae6ae5c2d51719eba960cf (patch)
tree4059739f0593b3961be9e90a0bbe3bbd1ca764c2
parentiwlwifi: defer update power mode while scan (diff)
downloadkernel-qcow2-linux-3eb9616af24d6a1910ae6ae5c2d51719eba960cf.tar.gz
kernel-qcow2-linux-3eb9616af24d6a1910ae6ae5c2d51719eba960cf.tar.xz
kernel-qcow2-linux-3eb9616af24d6a1910ae6ae5c2d51719eba960cf.zip
iwlwifi: avoid commit rxon during scan in iwl_set_no_assoc
Currently we are canceling scan when changing BSSID. Behave the same when changing association and beacon enablement, to avoid committing rxon during scan in iwl_set_no_assoc(). Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com> Acked-by: Wey-Yi Guy <wey-yi.w.guy@intel.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-core.c26
1 files changed, 14 insertions, 12 deletions
diff --git a/drivers/net/wireless/iwlwifi/iwl-core.c b/drivers/net/wireless/iwlwifi/iwl-core.c
index 8bbd152617fc..87c18001d2c0 100644
--- a/drivers/net/wireless/iwlwifi/iwl-core.c
+++ b/drivers/net/wireless/iwlwifi/iwl-core.c
@@ -1590,6 +1590,19 @@ void iwl_bss_info_changed(struct ieee80211_hw *hw,
mutex_lock(&priv->mutex);
+ if (changes & (BSS_CHANGED_BSSID | BSS_CHANGED_ASSOC |
+ BSS_CHANGED_BEACON_ENABLED)) {
+ /*
+ * If there is currently a HW scan going on in the
+ * background then we need to cancel it else the RXON
+ * below in post_associate or set_no_assoc can fail.
+ */
+ if (iwl_scan_cancel_timeout(priv, 200)) {
+ IWL_WARN(priv, "Can not cancel scan\n");
+ goto out;
+ }
+ }
+
if (changes & BSS_CHANGED_QOS) {
unsigned long flags;
@@ -1622,18 +1635,6 @@ void iwl_bss_info_changed(struct ieee80211_hw *hw,
if (changes & BSS_CHANGED_BSSID) {
IWL_DEBUG_MAC80211(priv, "BSSID %pM\n", bss_conf->bssid);
- /*
- * If there is currently a HW scan going on in the
- * background then we need to cancel it else the RXON
- * below/in post_associate will fail.
- */
- if (iwl_scan_cancel_timeout(priv, 100)) {
- IWL_WARN(priv, "Aborted scan still in progress after 100ms\n");
- IWL_DEBUG_MAC80211(priv, "leaving - scan abort failed.\n");
- mutex_unlock(&priv->mutex);
- return;
- }
-
/* mac80211 only sets assoc when in STATION mode */
if (vif->type == NL80211_IFTYPE_ADHOC || bss_conf->assoc) {
memcpy(ctx->staging.bssid_addr,
@@ -1752,6 +1753,7 @@ void iwl_bss_info_changed(struct ieee80211_hw *hw,
IWL_ERR(priv, "failed to update PAN params\n");
}
+out:
mutex_unlock(&priv->mutex);
IWL_DEBUG_MAC80211(priv, "leave\n");