aboutsummaryrefslogtreecommitdiffstats
path: root/net/mac80211/rx.c
diff options
context:
space:
mode:
authorMichal Kazior <michal.kazior@tieto.com>2014-09-02 08:05:10 -0400
committerJohannes Berg <johannes.berg@intel.com>2014-09-03 07:40:38 -0400
commit4549cf2b1803d29cfd019f7bfeaa784f8f9c558f (patch)
treebf39255e299b752cea30ce8437b9a685b189e5d4 /net/mac80211/rx.c
parentd0616613d9cf17919fbd46fa0274db4b0084ad62 (diff)
mac80211: fix offloaded BA session traffic after hw restart
When starting an offloaded BA session it is unknown what starting sequence number should be used. Using last_seq worked in most cases except after hw restart. When hw restart is requested last_seq is (rightfully so) kept unmodified. This ended up with BA sessions being restarted with an aribtrary BA window values resulting in dropped frames until sequence numbers caught up. Instead of last_seq pick seqno of a first Rxed frame of a given BA session. This fixes stalled traffic after hw restart with offloaded BA sessions (currently only ath10k). Signed-off-by: Michal Kazior <michal.kazior@tieto.com> Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Diffstat (limited to 'net/mac80211/rx.c')
-rw-r--r--net/mac80211/rx.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c
index a8d862f9183c..41eb12c87240 100644
--- a/net/mac80211/rx.c
+++ b/net/mac80211/rx.c
@@ -835,6 +835,16 @@ static bool ieee80211_sta_manage_reorder_buf(struct ieee80211_sub_if_data *sdata
835 835
836 spin_lock(&tid_agg_rx->reorder_lock); 836 spin_lock(&tid_agg_rx->reorder_lock);
837 837
838 /*
839 * Offloaded BA sessions have no known starting sequence number so pick
840 * one from first Rxed frame for this tid after BA was started.
841 */
842 if (unlikely(tid_agg_rx->auto_seq)) {
843 tid_agg_rx->auto_seq = false;
844 tid_agg_rx->ssn = mpdu_seq_num;
845 tid_agg_rx->head_seq_num = mpdu_seq_num;
846 }
847
838 buf_size = tid_agg_rx->buf_size; 848 buf_size = tid_agg_rx->buf_size;
839 head_seq_num = tid_agg_rx->head_seq_num; 849 head_seq_num = tid_agg_rx->head_seq_num;
840 850