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) { /* |