diff options
Diffstat (limited to 'net/mac80211/ht.c')
| -rw-r--r-- | net/mac80211/ht.c | 19 | 
1 files changed, 19 insertions, 0 deletions
diff --git a/net/mac80211/ht.c b/net/mac80211/ht.c index af8cee06e4f..3fcef7ed55d 100644 --- a/net/mac80211/ht.c +++ b/net/mac80211/ht.c @@ -257,6 +257,7 @@ void ieee80211_ba_session_work(struct work_struct *work)  	struct sta_info *sta =  		container_of(work, struct sta_info, ampdu_mlme.work);  	struct tid_ampdu_tx *tid_tx; +	struct tid_ampdu_rx *tid_rx;  	int tid;  	/* @@ -281,6 +282,24 @@ void ieee80211_ba_session_work(struct work_struct *work)  				sta, tid, WLAN_BACK_RECIPIENT,  				WLAN_REASON_UNSPECIFIED, true); +		/* +		 * Stop RX BA sessions affected by change of +		 * sta.max_rx_aggregation_subframe +		 */ +		tid_rx = sta->ampdu_mlme.tid_rx[tid]; +		if (tid_rx && +		    tid_rx->buf_size > sta->sta.max_rx_aggregation_subframes) { +			ht_dbg(sta->sdata, +			  "buf_size(%d) > max_subframes(%d) stopping tid %d\n", +			  tid_rx->buf_size, +			  sta->sta.max_rx_aggregation_subframes, +			  tid); + +			___ieee80211_stop_rx_ba_session( +				sta, tid, WLAN_BACK_RECIPIENT, +				WLAN_REASON_UNSPECIFIED, true); +		} +  		tid_tx = sta->ampdu_mlme.tid_start_tx[tid];  		if (tid_tx) {  			/*  |