android_kernel_xiaomi_sm8350/drivers/net/wireless
Helmut Schaa 96c3da7d7d rt2x00: rework tx status handling in rt2800pci
This patch changes the way tx status reports are handled by rt2800pci.
Previously rt2800pci would sometimes lose tx status reports as the
TX_STA_FIFO register is a fifo of 16 entries that can overflow in case
we don't read it often/fast enough. Since interrupts are disabled in the
device during the execution of the interrupt thread it happend sometimes
under high network and CPU load that processing took too long and a few
tx status reports were dropped by the hw.

To fix this issue the TX_STA_FIFO register is read directly in the
interrupt handler and stored in a kfifo which is large enough to hold
all status reports of all used tx queues.

To process the status reports a new tasklet txstatus_tasklet is used.
Using the already used interrupt thread is not possible since we don't
want to disable the TX_FIFO_STATUS interrupt while processing them and
it is not possible to schedule the interrupt thread multiple times for
execution. A tasklet instead can be scheduled multiple times which
allows to leave the TX_FIFO_STATUS interrupt enabled while a previously
scheduled tasklet is still executing.

In short: All other interrupts are handled in the interrupt thread as
before. Only the TX_FIFO_STATUS interrupt is partly handled in the
interrupt handler and finished in the according tasklet.

One drawback of this patch is that it duplicates some code from
rt2800lib. However, that can be cleaned up in the future once the
rt2800usb and rt2800pci tx status handling converge more.

Using this patch on a Ralink RT3052 embedded board gives me a reliable
wireless connection even under high CPU and network load. I've
transferred several gigabytes without any queue lockups.

Signed-off-by: Helmut Schaa <helmut.schaa@googlemail.com>
Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
2010-10-05 13:35:26 -04:00
..
ath ath9k: Report total tx/rx bytes and packets in debugfs. 2010-10-05 13:35:25 -04:00
b43
b43legacy
hostap
ipw2x00
iwlwifi iwlwifi: change WARN_ON to IWL_WARN in iwl_mac_add_interface 2010-10-05 13:35:22 -04:00
iwmc3200wifi
libertas Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6 2010-09-24 15:52:34 -04:00
libertas_tf
orinoco
p54 p54usb: add five more USBIDs 2010-10-05 13:35:25 -04:00
prism54
rt2x00 rt2x00: rework tx status handling in rt2800pci 2010-10-05 13:35:26 -04:00
rtl818x
wl12xx wl12xx: fix separate-object-folder builds 2010-09-28 10:52:26 -04:00
zd1211rw
adm8211.c
adm8211.h
airo_cs.c
airo.c airo: remove "basic_rate" module option 2010-09-24 15:54:29 -04:00
airo.h
at76c50x-usb.c
at76c50x-usb.h
atmel_cs.c
atmel_pci.c
atmel.c
atmel.h
Kconfig
mac80211_hwsim.c mac80211: add p2p device type support 2010-09-16 15:46:07 -04:00
Makefile wl12xx: fix separate-object-folder builds 2010-09-28 10:52:26 -04:00
mwl8k.c
ray_cs.c
ray_cs.h
rayctl.h
rndis_wlan.c
wl3501_cs.c
wl3501.h
zd1201.c
zd1201.h