aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMohamed Abbas <mohamed.abbas@intel.com>2008-03-20 11:14:29 -0400
committerJohn W. Linville <linville@tuxdriver.com>2008-03-25 16:41:57 -0400
commit675ef586f04e3a4566c9f437790a340711be5bd2 (patch)
tree23056411c3bd832b7d324185fdc09ef349d0c90a
parent85249e5fab13edb89258fa6d551cd4a3a4f0d569 (diff)
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.c2
-rw-r--r--net/mac80211/ieee80211_sta.c3
2 files changed, 4 insertions, 1 deletions
diff --git a/net/mac80211/ieee80211_ioctl.c b/net/mac80211/ieee80211_ioctl.c
index 8e8e5a19d893..5af23d318726 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)
287 if (chan && !(chan->flags & IEEE80211_CHAN_DISABLED)) { 287 if (chan && !(chan->flags & IEEE80211_CHAN_DISABLED)) {
288 local->oper_channel = chan; 288 local->oper_channel = chan;
289 289
290 if (local->sta_sw_scanning) 290 if (local->sta_sw_scanning || local->sta_hw_scanning)
291 ret = 0; 291 ret = 0;
292 else 292 else
293 ret = ieee80211_hw_config(local); 293 ret = ieee80211_hw_config(local);
diff --git a/net/mac80211/ieee80211_sta.c b/net/mac80211/ieee80211_sta.c
index fc73ca4abc08..bf130b6255ab 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)
3615 3615
3616 if (local->sta_hw_scanning) { 3616 if (local->sta_hw_scanning) {
3617 local->sta_hw_scanning = 0; 3617 local->sta_hw_scanning = 0;
3618 if (ieee80211_hw_config(local))
3619 printk(KERN_DEBUG "%s: failed to restore operational "
3620 "channel after scan\n", dev->name);
3618 /* Restart STA timer for HW scan case */ 3621 /* Restart STA timer for HW scan case */
3619 rcu_read_lock(); 3622 rcu_read_lock();
3620 list_for_each_entry_rcu(sdata, &local->interfaces, list) 3623 list_for_each_entry_rcu(sdata, &local->interfaces, list)