소스 검색

mac80211: don't tear down aggregation on suspend in case of wowlan->any

In case of "any" wowlan trigger, there is no reason to tear down
aggregations, as we want the device to continue working normally.

Similarly, there's no reason to tear down aggregations on resume,
as they should have been torn down on suspend if needed.
However, since the reconfiguration flow is shared with HW restart,
tear down aggregations on reconfiguration when we are not resuming.

To keep things working after non-wowlan suspend, keep clearing the
WLAN_STA_BLOCK_BA flag.

Signed-off-by: Eliad Peller <eliadx.peller@intel.com>
Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Eliad Peller 10 년 전
부모
커밋
2739271954
2개의 변경된 파일5개의 추가작업 그리고 3개의 파일을 삭제
  1. 2 1
      net/mac80211/pm.c
  2. 3 2
      net/mac80211/util.c

+ 2 - 1
net/mac80211/pm.c

@@ -23,7 +23,8 @@ int __ieee80211_suspend(struct ieee80211_hw *hw, struct cfg80211_wowlan *wowlan)
 
 
 	ieee80211_del_virtual_monitor(local);
 	ieee80211_del_virtual_monitor(local);
 
 
-	if (ieee80211_hw_check(hw, AMPDU_AGGREGATION)) {
+	if (ieee80211_hw_check(hw, AMPDU_AGGREGATION) &&
+	    !(wowlan && wowlan->any)) {
 		mutex_lock(&local->sta_mtx);
 		mutex_lock(&local->sta_mtx);
 		list_for_each_entry(sta, &local->sta_list, list) {
 		list_for_each_entry(sta, &local->sta_list, list) {
 			set_sta_flag(sta, WLAN_STA_BLOCK_BA);
 			set_sta_flag(sta, WLAN_STA_BLOCK_BA);

+ 3 - 2
net/mac80211/util.c

@@ -2017,8 +2017,9 @@ int ieee80211_reconfig(struct ieee80211_local *local)
 		mutex_lock(&local->sta_mtx);
 		mutex_lock(&local->sta_mtx);
 
 
 		list_for_each_entry(sta, &local->sta_list, list) {
 		list_for_each_entry(sta, &local->sta_list, list) {
-			ieee80211_sta_tear_down_BA_sessions(
-					sta, AGG_STOP_LOCAL_REQUEST);
+			if (!local->resuming)
+				ieee80211_sta_tear_down_BA_sessions(
+						sta, AGG_STOP_LOCAL_REQUEST);
 			clear_sta_flag(sta, WLAN_STA_BLOCK_BA);
 			clear_sta_flag(sta, WLAN_STA_BLOCK_BA);
 		}
 		}