linux/drivers/net/wireless/iwlwifi/dvm
Emmanuel Grumbach a0855054e5 iwlwifi: dvm: drop non VO frames when flushing
When mac80211 wants to ensure that a frame is sent, it calls
the flush() callback. Until now, iwldvm implemented this by
waiting that all the frames are sent (ACKed or timeout).
In case of weak signal, this can take a significant amount
of time, delaying the next connection (in case of roaming).
Many users have reported that the flush would take too long
leading to the following error messages to be printed:

iwlwifi 0000:03:00.0: fail to flush all tx fifo queues Q 2
iwlwifi 0000:03:00.0: Current SW read_ptr 161 write_ptr 201
iwl data: 00000000: 00 00 00 00 00 00 00 00 fe ff 01 00 00 00 00 00
[snip]
iwlwifi 0000:03:00.0: FH TRBs(0) = 0x00000000
[snip]
iwlwifi 0000:03:00.0: Q 0 is active and mapped to fifo 3 ra_tid 0x0000 [9,9]
[snip]

Instead of waiting for these packets, simply drop them. This
significantly improves the responsiveness of the network.
Note that all the queues are flushed, but the VO one. This
is not typically used by the applications and it likely
contains management frames that are useful for connection
or roaming.

This bug is tracked here:
https://bugzilla.kernel.org/show_bug.cgi?id=56581

But it is duplicated in distributions' trackers.
A simple search in Ubuntu's database led to these bugs:

https://bugs.launchpad.net/ubuntu/+source/linux-firmware/+bug/1270808
https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1305406
https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1356236
https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1360597
https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1361809

Cc: <stable@vger.kernel.org>
Depends-on: 77be2c54c5 ("mac80211: add vif to flush call")
Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
2014-10-23 21:21:48 +03:00
..
agn.h iwlwifi: make various things const 2014-02-13 10:18:43 +02:00
calib.c iwlwifi: remove CMD_SYNC 2014-05-13 13:52:19 +03:00
calib.h iwlwifi: Update Copyright to 2014 2013-12-31 19:03:53 +02:00
commands.h iwlwifi: Update Copyright to 2014 2013-12-31 19:03:53 +02:00
debugfs.c iwlwifi: remove CMD_SYNC 2014-05-13 13:52:19 +03:00
dev.h iwlwifi: make LED support optional 2014-05-06 20:40:05 +03:00
devices.c iwlwifi: remove CMD_SYNC 2014-05-13 13:52:19 +03:00
led.c wireless: delete non-required instances of include <linux/init.h> 2014-01-03 15:37:01 -05:00
led.h iwlwifi: make LED support optional 2014-05-06 20:40:05 +03:00
lib.c iwlwifi: remove CMD_SYNC 2014-05-13 13:52:19 +03:00
mac80211.c iwlwifi: dvm: drop non VO frames when flushing 2014-10-23 21:21:48 +03:00
main.c iwlwifi: remove CMD_SYNC 2014-05-13 13:52:19 +03:00
Makefile iwlwifi: make LED support optional 2014-05-06 20:40:05 +03:00
power.c iwlwifi: dvm: disable power save by default 2014-09-08 09:18:47 +03:00
power.h iwlwifi: Update Copyright to 2014 2013-12-31 19:03:53 +02:00
rs.c iwlwifi: remove CMD_SYNC 2014-05-13 13:52:19 +03:00
rs.h iwlwifi: rs: use const u16 for throughput tables 2014-02-03 22:23:37 +02:00
rx.c iwlwifi: dvm: don't use _ni mac80211's callbacks 2014-05-11 12:58:00 +03:00
rxon.c Revert "iwlwifi: dvm: don't enable CTS to self" 2014-08-31 22:11:19 +03:00
scan.c iwlwifi: remove CMD_SYNC 2014-05-13 13:52:19 +03:00
sta.c iwlwifi: remove CMD_SYNC 2014-05-13 13:52:19 +03:00
tt.c iwlwifi: remove CMD_SYNC 2014-05-13 13:52:19 +03:00
tt.h iwlwifi: Update Copyright to 2014 2013-12-31 19:03:53 +02:00
tx.c iwlwifi: trans: allow skipping scheduler hardware config 2014-09-03 22:49:05 +03:00
ucode.c iwlwifi: remove CMD_SYNC 2014-05-13 13:52:19 +03:00