diff options
author | Michal Kazior <michal.kazior@tieto.com> | 2014-07-16 06:09:31 -0400 |
---|---|---|
committer | Johannes Berg <johannes.berg@intel.com> | 2014-07-21 10:17:26 -0400 |
commit | 83eb935ec74a91468776cd86415abcb6ee23cca8 (patch) | |
tree | e0977824eadbba57f30adaa47f7d31c2a60ed6f1 /net/mac80211/sta_info.h | |
parent | 60e83deb4c1e7e8b6ab78e7331288bf4211bdeb6 (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.h | 5 |
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 { | |||
180 | struct tid_ampdu_rx { | 181 | struct 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; |