diff options
author | Luis R. Rodriguez <lrodriguez@atheros.com> | 2010-09-25 03:59:57 +0200 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2010-09-28 21:47:55 +0200 |
commit | 8d4780eb1ece4e8109b4f6b2e5e61f7fc593c3f4 (patch) | |
tree | 4d68c0dea0d852cddc64e0d65a2d303c918c0e6d /net/mac80211/main.c | |
parent | wl12xx: fix separate-object-folder builds (diff) | |
download | linux-8d4780eb1ece4e8109b4f6b2e5e61f7fc593c3f4.tar.xz linux-8d4780eb1ece4e8109b4f6b2e5e61f7fc593c3f4.zip |
mac80211: fix offchannel assumption upon association
Association is dealt with as an atomic offchannel operation,
we do this because we don't know we are associated until we
get the associatin response from the AP. When we do get the
associatin response though we were never clearing the offchannel
state. This has a few implications, we told drivers we were
still offchannel, and the first configured TX power for the
channel does not take into account any power constraints.
For ath9k this meant ANI calibration would not start upon
association, and we'd have to wait until the first bgscan
to be triggered. There may be other issues this resolves
but I'm too lazy to comb the code to check.
Cc: stable@kernel.org
Cc: Amod Bodas <amod.bodas@atheros.com>
Cc: Vasanth Thiagarajan <vasanth.thiagarajan@atheros.com>
Signed-off-by: Luis R. Rodriguez <lrodriguez@atheros.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'net/mac80211/main.c')
-rw-r--r-- | net/mac80211/main.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/net/mac80211/main.c b/net/mac80211/main.c index 7c8542627351..e24fa5be4264 100644 --- a/net/mac80211/main.c +++ b/net/mac80211/main.c @@ -110,7 +110,8 @@ int ieee80211_hw_config(struct ieee80211_local *local, u32 changed) chan = scan_chan; channel_type = NL80211_CHAN_NO_HT; local->hw.conf.flags |= IEEE80211_CONF_OFFCHANNEL; - } else if (local->tmp_channel) { + } else if (local->tmp_channel && + local->oper_channel != local->tmp_channel) { chan = scan_chan = local->tmp_channel; channel_type = local->tmp_channel_type; local->hw.conf.flags |= IEEE80211_CONF_OFFCHANNEL; |