android_kernel_xiaomi_sm8350/drivers/net
Daniel Hellstrom 0f73f2c5a3 GRETH: resolve SMP issues and other problems
Fixes the following:
1. POLL should not enable IRQ when work is not completed
2. No locking between TX descriptor cleaning and XMIT descriptor handling
3. No locking between RX POLL and XMIT modifying control register
4. Since TX cleaning (called from POLL) is running in parallel with XMIT
   unnecessary locking is needed.
5. IRQ handler looks at RX frame status solely, this is wrong when IRQ is
   temporarily disabled (in POLL), and when IRQ is shared.
6. IRQ handler clears IRQ status, which is unnecessary
7. TX queue was stopped in preventing cause when not MAX_SKB_FRAGS+1
   descriptors were available after a SKB been scheduled by XMIT. Instead
   the TX queue is stopped first when not enough descriptors are available
   upon entering XMIT.

It was hard to split up this patch in smaller pieces since all are tied
together somehow.

Note the RX flag used in the interrupt handler does not signal that
interrupt was asserted, but that a frame was received. Same goes for TX.
Also, IRQ is not asserted when the RX flag is set before enabling IRQ
enable until a new frame is received. So extra care must be taken to
avoid enabling IRQ and all descriptors are already used, hence dead lock
will upon us. See new POLL implementation that enableds IRQ then look at
the RX flag to determine if one or more IRQs may have been missed. TX/RX
flags are cleared before handling previously enabled descriptors, this
ensures that the RX/TX flags are valid when determining if IRQ should be
turned on again.

By moving TX cleaning from POLL to XMIT in the standard case, removes some
locking trouble. Enabling TX cleaning from poll only when not enough TX
descriptors are available is safe because the TX queue is at the same time
stopped, thus XMIT will not be called. The TX queue is woken up again when
enough descriptrs are available.

TX Frames are always enabled with IRQ, however the TX IRQ Enable flag will
not be enabled until XMIT must wait for free descriptors.

Locking RX and XMIT parts of the driver from each other is needed because
the RX/TX enable bits share the same register.

Signed-off-by: Daniel Hellstrom <daniel@gaisler.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2011-01-14 12:45:55 -08:00
..
appletalk
arcnet
arm ks8695net: Use default implementation of ethtool_ops::get_link 2011-01-13 21:49:55 -08:00
atl1c Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6 2010-12-26 22:37:05 -08:00
atl1e net: Fix drivers advertising HW_CSUM feature to use csum_start 2010-12-16 14:43:15 -08:00
atlx Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6 2011-01-04 11:57:25 -08:00
benet drivers/net/*/: Use static const 2010-12-21 02:16:10 -08:00
bna bna: Remove unnecessary memset(,0,) 2011-01-12 19:00:39 -08:00
bnx2x bnx2x: Fix the race on bp->stats_pending. 2011-01-09 15:47:47 -08:00
bonding Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6 2010-12-17 12:27:22 -08:00
caif Merge branch 'ux500-core' of git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-stericsson into devel-stable 2011-01-03 10:31:58 +00:00
can pch_can: Fix array miss-pointing issue 2010-12-22 15:25:40 -08:00
chelsio Merge branch 'for-2.6.38' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/wq 2011-01-07 16:58:04 -08:00
cris
cxgb3 drivers/net/*/: Use static const 2010-12-21 02:16:10 -08:00
cxgb4 cxgb4: NUMA-aware Tx queue allocations 2010-12-16 13:16:04 -08:00
cxgb4vf cxgb4vf: recover from failure in cxgb4vf_open() 2011-01-11 15:44:40 -08:00
e1000 e1000: Avoid unhandled IRQ 2011-01-14 02:00:46 -08:00
e1000e e1000e: consistent use of Rx/Tx vs. RX/TX/rx/tx in comments/logs 2011-01-14 02:06:23 -08:00
ehea ehea: Increase the skb array usage 2011-01-11 14:03:09 -08:00
enic Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6 2010-12-17 12:27:22 -08:00
fs_enet
hamradio hamradio: Resolve memory leak due to missing firmware release in add_mcs() 2011-01-09 15:45:48 -08:00
ibm_newemac Merge branch 'for-2.6.38' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/wq 2011-01-07 16:58:04 -08:00
igb igb: Add Anti-spoofing feature support 2010-12-24 21:36:51 -08:00
igbvf igbvf: add support for i350 VF device 2010-12-24 21:38:47 -08:00
irda smsc-ircc2: Fix section mismatch derived from smsc_ircc_pnp_probe() 2011-01-03 13:27:38 -08:00
ixgb net: Fix drivers advertising HW_CSUM feature to use csum_start 2010-12-16 14:43:15 -08:00
ixgbe net: remove dev_txq_stats_fold() 2011-01-13 21:44:34 -08:00
ixgbevf ixgbevf: Add X540 VF device support to the ixgbevf driver 2010-12-24 21:45:42 -08:00
ixp2000
mlx4 mlx4: Call alloc_etherdev to allocate RX and TX queues 2011-01-10 16:05:31 -08:00
myri10ge net: Fix drivers advertising HW_CSUM feature to use csum_start 2010-12-16 14:43:15 -08:00
netxen netxen: update driver version 4.0.75 2011-01-03 11:56:18 -08:00
octeon
pch_gbe
pcmcia pcnet_cs: add new_id 2011-01-11 14:03:08 -08:00
phy Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6 2010-12-17 12:27:22 -08:00
qlcnic qlcnic: change module parameter permissions 2011-01-10 13:34:55 -08:00
qlge drivers/net/*/: Use static const 2010-12-21 02:16:10 -08:00
sfc sfc: Restore the effect of the rss_cpus module parameter 2011-01-13 22:09:17 +00:00
skfp Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6 2011-01-04 11:57:25 -08:00
stmmac stmmac: unwind properly in stmmac_dvr_probe() 2010-12-21 10:53:19 -08:00
tile netdev: tilepro: Use is_unicast_ether_addr helper 2011-01-13 21:49:56 -08:00
tokenring drivers/net/*/: Use static const 2010-12-21 02:16:10 -08:00
tulip drivers/net/*/: Use static const 2010-12-21 02:16:10 -08:00
usb USB CDC NCM: Don't deref NULL in cdc_ncm_rx_fixup() and don't use uninitialized variable. 2011-01-13 21:48:26 -08:00
vmxnet3 drivers/net/*/: Use static const 2010-12-21 02:16:10 -08:00
vxge vxge: Remember to release firmware after upgrading firmware 2011-01-13 21:48:26 -08:00
wan Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6 2010-12-26 22:37:05 -08:00
wimax Merge branch 'usb-next' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb-2.6 2011-01-07 13:16:28 -08:00
wireless hostap_cs: fix sleeping function called from invalid context 2011-01-10 15:40:53 -05:00
3c59x.c
3c501.c drivers/net/*.c: Use static const 2010-12-21 02:16:08 -08:00
3c501.h
3c503.c drivers/net/*.c: Use static const 2010-12-21 02:16:08 -08:00
3c503.h
3c505.c
3c505.h
3c507.c drivers/net/*.c: Use static const 2010-12-21 02:16:08 -08:00
3c509.c
3c515.c
3c523.c
3c523.h
3c527.c drivers/net/*.c: Use static const 2010-12-21 02:16:08 -08:00
3c527.h
7990.c
7990.h
8139cp.c
8139too.c
8390.c
8390.h
8390p.c
82596.c
a2065.c
a2065.h
ac3200.c
acenic.c
acenic.h
amd8111e.c
amd8111e.h
apne.c
ariadne.c
ariadne.h
at1700.c drivers/net/*.c: Use static const 2010-12-21 02:16:08 -08:00
atarilance.c
atp.c
atp.h
au1000_eth.c
au1000_eth.h
ax88796.c
b44.c
b44.h
bcm63xx_enet.c
bcm63xx_enet.h
bfin_mac.c netdev: bfin_mac: Remove is_multicast_ether_addr use in netdev_for_each_mc_addr 2011-01-13 21:48:25 -08:00
bfin_mac.h netdev: bfin_mac: let boards set vlan masks 2011-01-10 13:31:14 -08:00
bmac.c
bmac.h
bnx2_fw.h
bnx2.c bnx2: Update firmware and version 2010-12-31 11:04:02 -08:00
bnx2.h
bsd_comp.c
cassini.c cassini: Fix build bustage on x86. 2011-01-14 12:39:59 -08:00
cassini.h cassini: Use local-mac-address prom property for Cassini MAC address 2011-01-06 11:50:30 -08:00
cnic_defs.h cnic: Add FCoE support on 57712 2010-12-23 11:44:34 -08:00
cnic_if.h cnic: Do not call bnx2i when bnx2i is calling cnic_unregister_driver() 2011-01-03 19:08:07 -08:00
cnic.c cnic: Fix the type field in SPQ messages 2011-01-06 11:27:22 -08:00
cnic.h cnic: Add FCoE support on 57712 2010-12-23 11:44:34 -08:00
cpmac.c
cs89x0.c
cs89x0.h
davinci_cpdma.c
davinci_cpdma.h
davinci_emac.c
davinci_mdio.c
de600.c
de600.h
de620.c
de620.h
declance.c
defxx.c
defxx.h
depca.c depca: Fix section mismatch derived from depca_isa_probe() 2011-01-03 13:27:38 -08:00
depca.h
dl2k.c
dl2k.h
dm9000.c
dm9000.h
dnet.c
dnet.h
dummy.c
e100.c
e2100.c drivers/net/*.c: Use static const 2010-12-21 02:16:08 -08:00
eepro.c drivers/net/*.c: Use static const 2010-12-21 02:16:08 -08:00
eexpress.c drivers/net/*.c: Use static const 2010-12-21 02:16:08 -08:00
eexpress.h
enc28j60_hw.h
enc28j60.c
epic100.c epic100: hamachi: yellowfin: Fix skb allocation size 2010-12-25 19:37:49 -08:00
eql.c
es3210.c
eth16i.c
ethoc.c
ewrk3.c
ewrk3.h
fealnx.c
fec_mpc52xx_phy.c
fec_mpc52xx.c
fec_mpc52xx.h
fec.c net/fec: add dual fec support for mx28 2011-01-09 15:42:56 -08:00
fec.h net/fec: add dual fec support for mx28 2011-01-09 15:42:56 -08:00
forcedeth.c forcedeth: Do not use legacy PCI power management 2011-01-09 16:20:29 -08:00
fsl_pq_mdio.c
fsl_pq_mdio.h
gianfar_ethtool.c
gianfar_sysfs.c
gianfar.c net: remove dev_txq_stats_fold() 2011-01-13 21:44:34 -08:00
gianfar.h net: remove dev_txq_stats_fold() 2011-01-13 21:44:34 -08:00
greth.c GRETH: resolve SMP issues and other problems 2011-01-14 12:45:55 -08:00
greth.h GRETH: handle frame error interrupts 2011-01-14 12:45:54 -08:00
hamachi.c epic100: hamachi: yellowfin: Fix skb allocation size 2010-12-25 19:37:49 -08:00
hp100.c
hp100.h
hp-plus.c
hp.c drivers/net/*.c: Use static const 2010-12-21 02:16:08 -08:00
hplance.c
hplance.h
hydra.c
ibmlana.c
ibmlana.h
ibmveth.c
ibmveth.h
ifb.c ifb: add performance flags 2011-01-03 12:43:10 -08:00
ioc3-eth.c
ipg.c
ipg.h
iseries_veth.c
jazzsonic.c
jme.c drivers/net/*.c: Use static const 2010-12-21 02:16:08 -08:00
jme.h
Kconfig net/fec: remove config FEC2 as it's used nowhere 2011-01-11 14:03:08 -08:00
korina.c
ks8842.c
ks8851_mll.c
ks8851.c
ks8851.h
ksz884x.c ksz884x: Fix section mismatch derived from pcidev_init() 2011-01-03 13:27:37 -08:00
lance.c
lasi_82596.c
lib8390.c
lib82596.c
LICENSE.SRC
ll_temac_main.c ll_temac: Fix section mismatch from the temac_of_probe 2011-01-03 12:07:39 -08:00
ll_temac_mdio.c
ll_temac.h
lne390.c
loopback.c
lp486e.c
mac89x0.c
mac8390.c
macb.c
macb.h
mace.c
mace.h
macmace.c
macsonic.c
macvlan.c
macvtap.c net: remove dev_txq_stats_fold() 2011-01-13 21:44:34 -08:00
Makefile
mdio.c
meth.c
meth.h
mii.c
mipsnet.c
mv643xx_eth.c
mvme147.c
myri_sbus.c
myri_sbus.h
natsemi.c
ne2.c
ne2k-pci.c
ne3210.c
ne-h8300.c
ne.c
netconsole.c netconsole: clarify stopping message 2011-01-06 11:30:23 -08:00
netx-eth.c
ni52.c drivers/net/*.c: Use static const 2010-12-21 02:16:08 -08:00
ni52.h
ni65.c drivers/net/*.c: Use static const 2010-12-21 02:16:08 -08:00
ni65.h
ni5010.c
ni5010.h
niu.c net: Fix drivers advertising HW_CSUM feature to use csum_start 2010-12-16 14:43:15 -08:00
niu.h
ns83820.c
pasemi_mac_ethtool.c
pasemi_mac.c
pasemi_mac.h
pci-skeleton.c
pcnet32.c
plip.c
ppp_async.c net: ppp: use {get,put}_unaligned_be{16,32} 2011-01-10 16:13:33 -08:00
ppp_deflate.c net: ppp: use {get,put}_unaligned_be{16,32} 2011-01-10 16:13:33 -08:00
ppp_generic.c net: ppp: use {get,put}_unaligned_be{16,32} 2011-01-10 16:13:33 -08:00
ppp_mppe.c net: ppp: use {get,put}_unaligned_be{16,32} 2011-01-10 16:13:33 -08:00
ppp_mppe.h
ppp_synctty.c net: ppp: use {get,put}_unaligned_be{16,32} 2011-01-10 16:13:33 -08:00
pppoe.c
pppox.c
pptp.c
ps3_gelic_net.c
ps3_gelic_net.h
ps3_gelic_wireless.c
ps3_gelic_wireless.h
pxa168_eth.c
qla3xxx.c
qla3xxx.h
r6040.c net: r6040: Return proper error for r6040_init_one 2011-01-06 11:18:07 -08:00
r8169.c r8169: keep firmware in memory. 2011-01-13 21:49:57 -08:00
rionet.c
rrunner.c
rrunner.h
s2io-regs.h
s2io.c
s2io.h
s6gmac.c
sb1000.c
sb1250-mac.c
sc92031.c
seeq8005.c
seeq8005.h
sgiseeq.c
sgiseeq.h
sh_eth.c
sh_eth.h
sis190.c
sis900.c
sis900.h
skge.c skge: Do not use legacy PCI power management 2010-12-31 12:50:18 -08:00
skge.h
sky2.c sky2: convert to new VLAN model (v0.2) 2011-01-09 15:54:15 -08:00
sky2.h sky2: convert to new VLAN model (v0.2) 2011-01-09 15:54:15 -08:00
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 drivers/net/*.c: Use static const 2010-12-21 02:16:08 -08:00
smsc911x.c
smsc911x.h
smsc9420.c
smsc9420.h
sni_82596.c
sonic.c
sonic.h
Space.c net/Space: delete orphaned externs from deleted drivers 2011-01-03 11:06:35 -08:00
spider_net_ethtool.c
spider_net.c
spider_net.h
starfire.c starfire: Fix dma_addr_t size test for MIPS 2010-12-31 12:33:17 -08:00
stnic.c
sun3_82586.c
sun3_82586.h
sun3lance.c
sunbmac.c
sunbmac.h
sundance.c Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6 2010-12-26 22:37:05 -08:00
sungem_phy.c
sungem_phy.h
sungem.c net: Fix drivers advertising HW_CSUM feature to use csum_start 2010-12-16 14:43:15 -08:00
sungem.h
sunhme.c net: Fix drivers advertising HW_CSUM feature to use csum_start 2010-12-16 14:43:15 -08:00
sunhme.h
sunlance.c
sunqe.c
sunqe.h
sunvnet.c
sunvnet.h
tc35815.c
tehuti.c tehuti: Firmware filename is tehuti/bdx.bin 2010-12-17 10:17:12 -08:00
tehuti.h
tg3.c Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6 2011-01-04 11:57:25 -08:00
tg3.h
tlan.c
tlan.h
tsi108_eth.c
tsi108_eth.h
tun.c net: Use skb_checksum_start_offset() 2010-12-16 14:43:14 -08:00
typhoon.c typhoon: memory corruption in typhoon_get_drvinfo() 2010-12-20 10:43:02 -08:00
typhoon.h
ucc_geth_ethtool.c
ucc_geth.c netdev: ucc_geth: Use is_multicast_ether_addr helper 2011-01-12 18:46:11 -08:00
ucc_geth.h
veth.c net/veth: Fix packet checksumming 2010-12-16 14:41:35 -08:00
via-rhine.c
via-velocity.c
via-velocity.h
virtio_net.c net: Use skb_checksum_start_offset() 2010-12-16 14:43:14 -08:00
wd.c drivers/net/*.c: Use static const 2010-12-21 02:16:08 -08:00
xen-netfront.c net offloading: Pass features into netif_needs_gso(). 2011-01-09 23:35:34 -08:00
xilinx_emaclite.c
xtsonic.c
yellowfin.c epic100: hamachi: yellowfin: Fix skb allocation size 2010-12-25 19:37:49 -08:00
znet.c
zorro8390.c