aboutsummaryrefslogtreecommitdiffstats
path: root/net/mac80211/sta_info.h
diff options
context:
space:
mode:
authorMichal Kazior <michal.kazior@tieto.com>2014-07-16 06:09:31 -0400
committerJohannes Berg <johannes.berg@intel.com>2014-07-21 10:17:26 -0400
commit83eb935ec74a91468776cd86415abcb6ee23cca8 (patch)
treee0977824eadbba57f30adaa47f7d31c2a60ed6f1 /net/mac80211/sta_info.h
parent60e83deb4c1e7e8b6ab78e7331288bf4211bdeb6 (diff)
mac80211: fix Rx reordering with RX_FLAG_AMSDU_MORE
Some drivers (e.g. ath10k) report A-MSDU subframes individually with identical seqno. The A-MPDU Rx reorder code did not account for that which made it practically unusable with drivers using RX_FLAG_AMSDU_MORE because it would end up dropping a lot of frames resulting in confusion in upper network transport layers. Signed-off-by: Michal Kazior <michal.kazior@tieto.com> Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Diffstat (limited to 'net/mac80211/sta_info.h')
-rw-r--r--net/mac80211/sta_info.h5
1 files changed, 3 insertions, 2 deletions
diff --git a/net/mac80211/sta_info.h b/net/mac80211/sta_info.h
index e37f00969526..d411bcc8ef08 100644
--- a/net/mac80211/sta_info.h
+++ b/net/mac80211/sta_info.h
@@ -155,7 +155,8 @@ struct tid_ampdu_tx {
155/** 155/**
156 * struct tid_ampdu_rx - TID aggregation information (Rx). 156 * struct tid_ampdu_rx - TID aggregation information (Rx).
157 * 157 *
158 * @reorder_buf: buffer to reorder incoming aggregated MPDUs 158 * @reorder_buf: buffer to reorder incoming aggregated MPDUs. An MPDU may be an
159 * A-MSDU with individually reported subframes.
159 * @reorder_time: jiffies when skb was added 160 * @reorder_time: jiffies when skb was added
160 * @session_timer: check if peer keeps Tx-ing on the TID (by timeout value) 161 * @session_timer: check if peer keeps Tx-ing on the TID (by timeout value)
161 * @reorder_timer: releases expired frames from the reorder buffer. 162 * @reorder_timer: releases expired frames from the reorder buffer.
@@ -180,7 +181,7 @@ struct tid_ampdu_tx {
180struct tid_ampdu_rx { 181struct tid_ampdu_rx {
181 struct rcu_head rcu_head; 182 struct rcu_head rcu_head;
182 spinlock_t reorder_lock; 183 spinlock_t reorder_lock;
183 struct sk_buff **reorder_buf; 184 struct sk_buff_head *reorder_buf;
184 unsigned long *reorder_time; 185 unsigned long *reorder_time;
185 struct timer_list session_timer; 186 struct timer_list session_timer;
186 struct timer_list reorder_timer; 187 struct timer_list reorder_timer;