Procházet zdrojové kódy

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>
Mohamed Abbas před 17 roky
rodič
revize
675ef586f0
2 změnil soubory, kde provedl 4 přidání a 1 odebrání
  1. 1 1
      net/mac80211/ieee80211_ioctl.c
  2. 3 0
      net/mac80211/ieee80211_sta.c

+ 1 - 1
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);

+ 3 - 0
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)