android_kernel_xiaomi_sm8350/drivers/net
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
..
appletalk
arcnet arcnet: fix signed bug in probe function 2010-07-18 15:07:15 -07:00
arm net: preserve ifreq parameter when calling generic phy_mii_ioctl(). 2010-07-18 19:15:25 -07:00
atl1c
atl1e
atlx
benet Merge branch 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial 2010-08-04 15:31:02 -07:00
bnx2x net: bnx2x_cmn.c needs net/ip6_checksum.h for csum_ipv6_magic 2010-07-28 22:20:34 -07:00
bonding bonding: prevent sysfs from allowing arp monitoring with alb/tlb 2010-07-30 23:27:57 -07:00
caif caif: handle snprintf() return 2010-07-26 21:05:03 -07:00
can can: Add driver for esd CAN-USB/2 device 2010-08-03 16:37:58 -07:00
chelsio
cris
cxgb3 cxgb3: do not use PCI resources before pci_enable_device() 2010-08-04 16:18:02 -07:00
cxgb4 cxgb4: update driver version 2010-08-02 16:26:44 -07:00
cxgb4vf cxgb4vf: do not use PCI resources before pci_enable_device() 2010-08-04 16:18:02 -07:00
e1000 e100/e1000*/igb*/ixgb*: Add missing read memory barrier 2010-08-08 20:02:45 -07:00
e1000e e100/e1000*/igb*/ixgb*: Add missing read memory barrier 2010-08-08 20:02:45 -07:00
ehea
enic drivers/net/enic: Use %pUB to format a UUID 2010-08-04 16:18:04 -07:00
fs_enet Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next-2.6 2010-08-04 11:47:58 -07:00
hamradio
ibm_newemac
igb e100/e1000*/igb*/ixgb*: Add missing read memory barrier 2010-08-08 20:02:45 -07:00
igbvf e100/e1000*/igb*/ixgb*: Add missing read memory barrier 2010-08-08 20:02:45 -07:00
irda drivers/net/irda: use for_each_pci_dev() 2010-07-21 14:44:28 -07:00
ixgb e100/e1000*/igb*/ixgb*: Add missing read memory barrier 2010-08-08 20:02:45 -07:00
ixgbe e100/e1000*/igb*/ixgb*: Add missing read memory barrier 2010-08-08 20:02:45 -07:00
ixgbevf e100/e1000*/igb*/ixgb*: Add missing read memory barrier 2010-08-08 20:02:45 -07:00
ixp2000
mlx4 drivers/net/mlx4: Use %pV, pr_<level>, printk_once 2010-07-15 19:05:17 -07:00
myri10ge
netxen netxen: protect tx timeout recovery by rtnl lock 2010-08-07 23:05:23 -07:00
octeon net: preserve ifreq parameter when calling generic phy_mii_ioctl(). 2010-07-18 19:15:25 -07:00
pcmcia
phy Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next-2.6 2010-08-04 11:47:58 -07:00
qlcnic qlcnic: fix diag resource allocation 2010-07-25 16:32:41 -07:00
qlge drivers/net/qlge: Use pr_<level>, shrink text a bit 2010-07-21 14:44:18 -07:00
sfc
skfp
stmmac stmmac: fix automatic PAD/FCS stripping 2010-07-27 20:43:50 -07:00
tokenring
tulip Merge branch 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial 2010-08-04 15:31:02 -07:00
usb usbnet: remove noisy and hardly useful printk 2010-08-05 13:21:24 -07:00
vmxnet3 net-next: Fix an overflow bug in vmxnet3 Tx descriptor 2010-07-25 17:06:52 -07:00
vxge drivers/net/vxge/vxge-main.c: Use pr_<level> and netdev_<level> 2010-07-30 23:27:57 -07:00
wan drivers/net/wan/farsync.c: Use standard pr_<level> 2010-08-02 16:01:35 -07:00
wimax Merge branch 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial 2010-08-04 15:31:02 -07:00
wireless rt2x00: rework tx status handling in rt2800pci 2010-10-05 13:35:26 -04:00
3c59x.c 3c59x: Add ethtool WOL support 2010-07-25 16:48:44 -07:00
3c501.c
3c501.h
3c503.c
3c503.h
3c505.c
3c505.h
3c507.c
3c509.c
3c515.c
3c523.c
3c523.h
3c527.c
3c527.h
7990.c
7990.h
8139cp.c
8139too.c
8390.c
8390.h
8390p.c
82596.c drivers/net/82596.c: fix warning 2010-07-19 15:27:13 -07:00
a2065.c
a2065.h
ac3200.c
acenic.c
acenic.h
amd8111e.c
amd8111e.h
apne.c
ariadne.c
ariadne.h
at1700.c
atarilance.c
atp.c
atp.h
au1000_eth.c net: preserve ifreq parameter when calling generic phy_mii_ioctl(). 2010-07-18 19:15:25 -07:00
au1000_eth.h
ax88796.c
b44.c
b44.h
bcm63xx_enet.c net: preserve ifreq parameter when calling generic phy_mii_ioctl(). 2010-07-18 19:15:25 -07:00
bcm63xx_enet.h
bfin_mac.c
bfin_mac.h
bmac.c
bmac.h
bnx2_fw.h
bnx2.c bnx2: Update version to 2.0.17. 2010-07-19 20:30:07 -07:00
bnx2.h bnx2: Call pci_enable_msix() with actual number of vectors. 2010-07-19 20:30:06 -07:00
bsd_comp.c
cassini.c
cassini.h
cnic_defs.h
cnic_if.h
cnic.c bnx2x: Create separate folder for bnx2x driver 2010-07-27 20:35:39 -07:00
cnic.h
cpmac.c net: preserve ifreq parameter when calling generic phy_mii_ioctl(). 2010-07-18 19:15:25 -07:00
cs89x0.c net: Removing dead ARCH_PNX010X 2010-07-19 13:32:57 -07:00
cs89x0.h
davinci_emac.c davinci_emac: Fix use after free in davinci_emac_remove 2010-08-04 16:18:03 -07:00
de600.c
de600.h
de620.c
de620.h
declance.c NET: declance: Fix section mismatches 2010-07-26 19:08:14 +01:00
defxx.c
defxx.h
depca.c
depca.h
dl2k.c
dl2k.h
dm9000.c
dm9000.h
dnet.c dnet: fixup error handling in initialization 2010-07-30 23:27:58 -07:00
dnet.h
dummy.c
e100.c e100/e1000*/igb*/ixgb*: Add missing read memory barrier 2010-08-08 20:02:45 -07:00
e2100.c
eepro.c
eexpress.c
eexpress.h
enc28j60_hw.h
enc28j60.c
epic100.c
eql.c
es3210.c
eth16i.c eth16i: fix memory leak 2010-07-14 17:57:19 -07:00
ethoc.c ethoc: add devinit/devexit section initializers 2010-07-26 18:45:05 -07:00
ewrk3.c
ewrk3.h
fealnx.c
fec_mpc52xx_phy.c
fec_mpc52xx.c net: preserve ifreq parameter when calling generic phy_mii_ioctl(). 2010-07-18 19:15:25 -07:00
fec_mpc52xx.h
fec.c net/fec: restore interrupt mask after software-reset in fec_stop() 2010-07-22 14:14:46 -07:00
fec.h
forcedeth.c forcedeth: Fix different hardware statistics versions. 2010-07-25 21:54:28 -07:00
fsl_pq_mdio.c
fsl_pq_mdio.h
gianfar_ethtool.c
gianfar_sysfs.c
gianfar.c Merge branch 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial 2010-08-04 15:31:02 -07:00
gianfar.h
greth.c
greth.h
hamachi.c
hp100.c Merge branch 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial 2010-08-04 15:31:02 -07:00
hp100.h
hp-plus.c
hp.c
hplance.c
hplance.h
hydra.c
ibmlana.c
ibmlana.h
ibmveth.c ibmveth: lost IRQ while closing/opening device leads to service loss 2010-07-16 13:03:23 -07:00
ibmveth.h
ifb.c
ioc3-eth.c
ipg.c
ipg.h
iseries_veth.c
jazzsonic.c
jme.c
jme.h
Kconfig net: ks8842 depends on DMA_ENGINE 2010-07-30 22:10:01 -07:00
korina.c
ks8842.c ks8842: Fix warnings on 64-bit. 2010-07-27 22:24:37 -07:00
ks8851_mll.c
ks8851.c
ks8851.h
ksz884x.c Merge branch 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial 2010-08-04 15:31:02 -07:00
lance.c
lasi_82596.c
lib8390.c
lib82596.c
LICENSE.SRC
ll_temac_main.c Merge branch 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial 2010-08-04 15:31:02 -07:00
ll_temac_mdio.c
ll_temac.h
lne390.c
loopback.c
lp486e.c
mac89x0.c
mac8390.c
macb.c net: preserve ifreq parameter when calling generic phy_mii_ioctl(). 2010-07-18 19:15:25 -07:00
macb.h
mace.c
mace.h
macmace.c
macsonic.c
macvlan.c macvlan: Fix rx counters update in macvlan_handle_frame() 2010-07-27 21:02:42 -07:00
macvtap.c Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6 2010-07-27 21:01:35 -07:00
Makefile bnx2x: Create separate folder for bnx2x driver 2010-07-27 20:35:39 -07:00
mdio.c
meth.c
meth.h
mii.c
mipsnet.c
mv643xx_eth.c mv643xx_eth: potential null dereference 2010-07-23 13:05:12 -07:00
mvme147.c
myri_sbus.c
myri_sbus.h
natsemi.c
ne2.c
ne2k-pci.c
ne3210.c
ne-h8300.c
ne.c
netconsole.c
netx-eth.c
ni52.c
ni52.h
ni65.c
ni65.h
ni5010.c
ni5010.h
niu.c
niu.h
ns83820.c
pasemi_mac_ethtool.c
pasemi_mac.c
pasemi_mac.h
pci-skeleton.c
pcnet32.c
plip.c
ppp_async.c ppp: make channel_ops const 2010-08-04 21:53:17 -07:00
ppp_deflate.c
ppp_generic.c
ppp_mppe.c
ppp_mppe.h
ppp_synctty.c ppp: make channel_ops const 2010-08-04 21:53:17 -07:00
pppoe.c ppp: make channel_ops const 2010-08-04 21:53:17 -07:00
pppox.c
ps3_gelic_net.c
ps3_gelic_net.h
ps3_gelic_wireless.c
ps3_gelic_wireless.h
qla3xxx.c drivers/net/qla3xxx.c: Checkpatch cleanups 2010-07-26 13:15:21 -07:00
qla3xxx.h
r6040.c r6040: Fix args to phy_mii_ioctl(). 2010-07-21 21:10:49 -07:00
r8169.c Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6 2010-07-20 18:25:24 -07:00
rionet.c
rrunner.c
rrunner.h
s2io-regs.h vxge: Update copyright information 2010-07-15 20:46:22 -07:00
s2io.c net: s2io: fix buffer overflow 2010-07-23 13:05:13 -07:00
s2io.h Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6 2010-07-27 21:01:35 -07:00
s6gmac.c
sb1000.c
sb1250-mac.c net: preserve ifreq parameter when calling generic phy_mii_ioctl(). 2010-07-18 19:15:25 -07:00
sc92031.c
seeq8005.c
seeq8005.h
sgiseeq.c
sgiseeq.h
sh_eth.c Merge branch 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial 2010-08-04 15:31:02 -07:00
sh_eth.h
sis190.c
sis900.c
sis900.h
skge.c
skge.h
sky2.c sky2: Code style fixes 2010-07-30 23:59:04 -07:00
sky2.h
slhc.c
slip.c
slip.h
smc91x.c
smc91x.h
smc911x.c
smc911x.h
smc9194.c
smc9194.h
smc-mca.c
smc-ultra32.c
smc-ultra.c
smsc911x.c smsc911x: Add spinlocks around registers access 2010-07-19 13:36:21 -07:00
smsc911x.h
smsc9420.c net: preserve ifreq parameter when calling generic phy_mii_ioctl(). 2010-07-18 19:15:25 -07:00
smsc9420.h
sni_82596.c
sonic.c
sonic.h
Space.c
spider_net_ethtool.c
spider_net.c
spider_net.h
starfire.c
stnic.c
sun3_82586.c
sun3_82586.h
sun3lance.c
sunbmac.c
sunbmac.h
sundance.c
sungem_phy.c
sungem_phy.h
sungem.c
sungem.h
sunhme.c
sunhme.h
sunlance.c
sunqe.c
sunqe.h
sunvnet.c
sunvnet.h
tc35815.c net: preserve ifreq parameter when calling generic phy_mii_ioctl(). 2010-07-18 19:15:25 -07:00
tehuti.c
tehuti.h
tg3.c tg3: Update version to 3.113 2010-08-02 15:46:33 -07:00
tg3.h tg3: Migrate tg3_flags to phy_flags 2010-08-02 15:46:33 -07:00
tlan.c
tlan.h
tsi108_eth.c
tsi108_eth.h
tun.c tun: keep link (carrier) state up to date 2010-07-30 22:06:41 -07:00
typhoon.c
typhoon.h
ucc_geth_ethtool.c
ucc_geth.c ucc_geth: fix UCC device number in debug message 2010-07-30 22:08:50 -07:00
ucc_geth.h
veth.c
via-rhine.c
via-velocity.c via-velocity: do not use PCI resources before pci_enable_device() 2010-08-04 16:18:03 -07:00
via-velocity.h
virtio_net.c virtio_net: implements ethtool_ops.get_drvinfo 2010-08-04 21:53:17 -07:00
wd.c wd: fix memory leak 2010-07-14 17:53:18 -07:00
xen-netfront.c
xilinx_emaclite.c
xtsonic.c
yellowfin.c
znet.c
zorro8390.c