linux/drivers/net/wireless
Emmanuel Grumbach 532beba378 iwlwifi: mvm: don't let NDPs mess the packet tracking
We need to track the next packet that we will reclaim in
order to know when the Tx queues are empty. This is useful
when we open or tear down an A-MPDU session which requires
to switch queue.
The next packet being reclaimed is identified by its WiFi
sequence number and this is relevant only when we use QoS.
QoS NDPs do have a TID but have a meaningless sequence
number. The spec mandates the receiver to ignore the
sequence number in this case, allowing the transmitter to
put any sequence number. Our implementation leaves it 0.
When we reclaim a QoS NDP, we can't update the next_relcaim
counter since the sequence number of the QoS NDP itself is
invalid.
We used to update the next_reclaim based on the sequence
number of the QoS NDP which reset it to 1 (0 + 1) and
because of this, we never knew when the queue got empty.
This had to sad consequence to stuck the A-MPDU state
machine in a transient state.
To fix this, don't update next_reclaim when we reclaim
a QoS NDP.

Alesya saw this bug when testing u-APSD. Because the
A-MPDU state machine was stuck in EMPTYING_DELBA, we
updated mac80211 that we still have frames for that
station when it got back to sleep. mac80211 then wrongly
set the TIM bit in the beacon and requested to release
non-existent frames from the A-MPDU queue. This led to
a situation where the client was trying to poll frames
but we had no frames to send.

Reported-by: Alesya Shapira <alesya.shapira@intel.com>
Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
2016-03-09 20:59:20 +02:00
..
admtek adm80211: move under admtek vendor directory 2015-11-17 19:49:19 +02:00
ath cfg80211: basic support for PBSS network type 2016-02-24 09:04:34 +01:00
atmel atmel: move under atmel vendor directory 2015-11-18 11:19:07 +02:00
broadcom mac80211: pass block ack session timeout to to driver 2016-01-14 11:13:17 +01:00
cisco wireless: airo: re-use mac_pton() 2015-11-30 14:59:28 +02:00
intel iwlwifi: mvm: don't let NDPs mess the packet tracking 2016-03-09 20:59:20 +02:00
intersil prism54: fix checks for dma mapping errors 2015-12-31 10:23:32 +02:00
marvell mac80211: pass block ack session timeout to to driver 2016-01-14 11:13:17 +01:00
mediatek mac80211: pass block ack session timeout to to driver 2016-01-14 11:13:17 +01:00
ralink mac80211: pass block ack session timeout to to driver 2016-01-14 11:13:17 +01:00
realtek mac80211: pass block ack session timeout to to driver 2016-01-14 11:13:17 +01:00
rsi mac80211: pass block ack session timeout to to driver 2016-01-14 11:13:17 +01:00
st mac80211: pass block ack session timeout to to driver 2016-01-14 11:13:17 +01:00
ti mac80211: pass block ack session timeout to to driver 2016-01-14 11:13:17 +01:00
zydas zd1211rw: move under zydas vendor directory 2015-11-18 14:28:30 +02:00
Kconfig mac80211_hwsim: move Kconfig entry for sorting alphabetically 2015-11-18 15:23:36 +02:00
mac80211_hwsim.c mac80211_hwsim: remove shadowing variable 2016-02-24 09:04:22 +01:00
mac80211_hwsim.h
Makefile ath: unify Kconfig with other vendors 2015-11-18 14:28:31 +02:00
ray_cs.c ray_cs: Change 1 to true for bool type variable. 2015-06-02 23:30:14 +03:00
ray_cs.h
rayctl.h
rndis_wlan.c rndis_wlan: fix checking for default value 2015-09-22 16:14:32 -07:00
wl3501_cs.c
wl3501.h