diff options
author | Mohamed Abbas <mohamed.abbas@intel.com> | 2008-03-20 08:14:29 -0700 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2008-03-25 16:41:57 -0400 |
commit | 675ef586f04e3a4566c9f437790a340711be5bd2 (patch) | |
tree | 23056411c3bd832b7d324185fdc09ef349d0c90a | |
parent | 85249e5fab13edb89258fa6d551cd4a3a4f0d569 (diff) | |
download | op-kernel-dev-675ef586f04e3a4566c9f437790a340711be5bd2.zip op-kernel-dev-675ef586f04e3a4566c9f437790a340711be5bd2.tar.gz |
mac80211: prevent tuning during scanning
Postpone calling ieee80211_hw_config if hardware scanning is active.
This is similar to solution for software scanning where channel setting
is delayed until scan complete.
Signed-off-by: Mohamed Abbas <mohamed.abbas@intel.com>
Signed-off-by: Reinette Chatre <reinette.chatre@intel.com>
Acked-by: Johannes Berg <johannes@sipsolutions.net>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
-rw-r--r-- | net/mac80211/ieee80211_ioctl.c | 2 | ||||
-rw-r--r-- | net/mac80211/ieee80211_sta.c | 3 |
2 files changed, 4 insertions, 1 deletions
diff --git a/net/mac80211/ieee80211_ioctl.c b/net/mac80211/ieee80211_ioctl.c index 8e8e5a1..5af23d3 100644 --- a/net/mac80211/ieee80211_ioctl.c +++ b/net/mac80211/ieee80211_ioctl.c @@ -287,7 +287,7 @@ int ieee80211_set_freq(struct ieee80211_local *local, int freqMHz) if (chan && !(chan->flags & IEEE80211_CHAN_DISABLED)) { local->oper_channel = chan; - if (local->sta_sw_scanning) + if (local->sta_sw_scanning || local->sta_hw_scanning) ret = 0; else ret = ieee80211_hw_config(local); diff --git a/net/mac80211/ieee80211_sta.c b/net/mac80211/ieee80211_sta.c index fc73ca4..bf130b6 100644 --- a/net/mac80211/ieee80211_sta.c +++ b/net/mac80211/ieee80211_sta.c @@ -3615,6 +3615,9 @@ void ieee80211_scan_completed(struct ieee80211_hw *hw) if (local->sta_hw_scanning) { local->sta_hw_scanning = 0; + if (ieee80211_hw_config(local)) + printk(KERN_DEBUG "%s: failed to restore operational " + "channel after scan\n", dev->name); /* Restart STA timer for HW scan case */ rcu_read_lock(); list_for_each_entry_rcu(sdata, &local->interfaces, list) |