瀏覽代碼

rt2x00: change order when stop beaconing

When no beaconing is needed, first stop beacon queue (disable beaconing
globally) to avoid possible sending of not prepared beacon on short
period after clearing beacon and before stop of BCN queue.

Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Stanislaw Gruszka 11 年之前
父節點
當前提交
ddb405506c
共有 1 個文件被更改,包括 6 次插入6 次删除
  1. 6 6
      drivers/net/wireless/rt2x00/rt2x00mac.c

+ 6 - 6
drivers/net/wireless/rt2x00/rt2x00mac.c

@@ -628,12 +628,6 @@ void rt2x00mac_bss_info_changed(struct ieee80211_hw *hw,
 		if (!bss_conf->enable_beacon && intf->enable_beacon) {
 		if (!bss_conf->enable_beacon && intf->enable_beacon) {
 			rt2x00dev->intf_beaconing--;
 			rt2x00dev->intf_beaconing--;
 			intf->enable_beacon = false;
 			intf->enable_beacon = false;
-			/*
-			 * Clear beacon in the H/W for this vif. This is needed
-			 * to disable beaconing on this particular interface
-			 * and keep it running on other interfaces.
-			 */
-			rt2x00queue_clear_beacon(rt2x00dev, vif);
 
 
 			if (rt2x00dev->intf_beaconing == 0) {
 			if (rt2x00dev->intf_beaconing == 0) {
 				/*
 				/*
@@ -642,6 +636,12 @@ void rt2x00mac_bss_info_changed(struct ieee80211_hw *hw,
 				 */
 				 */
 				rt2x00queue_stop_queue(rt2x00dev->bcn);
 				rt2x00queue_stop_queue(rt2x00dev->bcn);
 			}
 			}
+			/*
+			 * Clear beacon in the H/W for this vif. This is needed
+			 * to disable beaconing on this particular interface
+			 * and keep it running on other interfaces.
+			 */
+			rt2x00queue_clear_beacon(rt2x00dev, vif);
 		} else if (bss_conf->enable_beacon && !intf->enable_beacon) {
 		} else if (bss_conf->enable_beacon && !intf->enable_beacon) {
 			rt2x00dev->intf_beaconing++;
 			rt2x00dev->intf_beaconing++;
 			intf->enable_beacon = true;
 			intf->enable_beacon = true;