linux/drivers/net/ethernet
Iyappan Subramanian ecf6ba83d7 drivers: net: xgene: fix: Out of order descriptor bytes read
This patch fixes the following kernel crash,

	WARNING: CPU: 2 PID: 0 at net/ipv4/tcp_input.c:3079 tcp_clean_rtx_queue+0x658/0x80c()
	Call trace:
	[<fffffe0000096b7c>] dump_backtrace+0x0/0x184
	[<fffffe0000096d10>] show_stack+0x10/0x1c
	[<fffffe0000685ea0>] dump_stack+0x74/0x98
	[<fffffe00000b44e0>] warn_slowpath_common+0x88/0xb0
	[<fffffe00000b461c>] warn_slowpath_null+0x14/0x20
	[<fffffe00005b5c1c>] tcp_clean_rtx_queue+0x654/0x80c
	[<fffffe00005b6228>] tcp_ack+0x454/0x688
	[<fffffe00005b6ca8>] tcp_rcv_established+0x4a4/0x62c
	[<fffffe00005bf4b4>] tcp_v4_do_rcv+0x16c/0x350
	[<fffffe00005c225c>] tcp_v4_rcv+0x8e8/0x904
	[<fffffe000059d470>] ip_local_deliver_finish+0x100/0x26c
	[<fffffe000059dad8>] ip_local_deliver+0xac/0xc4
	[<fffffe000059d6c4>] ip_rcv_finish+0xe8/0x328
	[<fffffe000059dd3c>] ip_rcv+0x24c/0x38c
	[<fffffe0000563950>] __netif_receive_skb_core+0x29c/0x7c8
	[<fffffe0000563ea4>] __netif_receive_skb+0x28/0x7c
	[<fffffe0000563f54>] netif_receive_skb_internal+0x5c/0xe0
	[<fffffe0000564810>] napi_gro_receive+0xb4/0x110
	[<fffffe0000482a2c>] xgene_enet_process_ring+0x144/0x338
	[<fffffe0000482d18>] xgene_enet_napi+0x1c/0x50
	[<fffffe0000565454>] net_rx_action+0x154/0x228
	[<fffffe00000b804c>] __do_softirq+0x110/0x28c
	[<fffffe00000b8424>] irq_exit+0x8c/0xc0
	[<fffffe0000093898>] handle_IRQ+0x44/0xa8
	[<fffffe000009032c>] gic_handle_irq+0x38/0x7c
	[...]

Software writes poison data into the descriptor bytes[15:8] and upon
receiving the interrupt, if those bytes are overwritten by the hardware with
the valid data, software also reads bytes[7:0] and executes receive/tx
completion logic.

If the CPU executes the above two reads in out of order fashion, then the
bytes[7:0] will have older data and causing the kernel panic.  We have to
force the order of the reads and thus this patch introduces read memory
barrier between these reads.

Signed-off-by: Iyappan Subramanian <isubramanian@apm.com>
Signed-off-by: Keyur Chudgar <kchudgar@apm.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2015-01-30 18:17:31 -08:00
..
3com net: typhoon: Remove redundant casts 2014-10-24 00:41:31 -04:00
8390 ne2k-pci: Add pci_disable_device in error handling 2014-12-27 02:20:55 -05:00
adaptec
adi net: ethernet: adi: drop owner assignment from platform_drivers 2014-10-20 16:21:03 +02:00
aeroflex net: ethernet: aeroflex: drop owner assignment from platform_drivers 2014-10-20 16:21:03 +02:00
agere et131x: Add PCIe gigabit ethernet driver et131x to drivers/net 2014-10-03 12:22:19 -07:00
allwinner net: sun4i-emac: fix error return code 2014-12-31 19:19:00 -05:00
alteon
altera Altera TSE: Add missing phydev 2015-01-02 15:45:10 -05:00
amd net: am2150: fix nmclan_cs.c shared interrupt handling 2015-01-29 15:08:21 -08:00
apm drivers: net: xgene: fix: Out of order descriptor bytes read 2015-01-30 18:17:31 -08:00
apple net: ethernet: apple: drop owner assignment from platform_drivers 2014-10-20 16:21:04 +02:00
arc
atheros alx: fix alx_poll() 2015-01-11 21:45:50 -05:00
broadcom bnx2x: fix napi poll return value for repoll 2015-01-27 00:29:29 -08:00
brocade net: incorrect use of init_completion fixup 2014-12-26 17:07:50 -05:00
cadence net/at91_ether: prepare and unprepare clock 2015-01-12 15:35:47 -05:00
calxeda net: ethernet: Remove superfluous ether_setup after alloc_etherdev 2014-10-03 15:31:40 -07:00
chelsio cxgb4vf: Fix queue allocation for 40G adapter 2015-01-14 16:48:08 -05:00
cirrus net: cs89x0: always build platform code if !HAS_IOPORT_MAP 2015-01-29 15:08:20 -08:00
cisco enic: fix rx napi poll return value 2015-01-24 22:39:03 -08:00
davicom Driver core patches for 3.19-rc1 2014-12-14 16:10:09 -08:00
dec uli526x: fix misspelling of current function in string 2014-12-09 16:18:46 -05:00
dlink
emulex be2net: Allow GRE to work concurrently while a VxLAN tunnel is configured 2015-01-15 01:55:05 -05:00
faraday net: ethernet: faraday: drop owner assignment from platform_drivers 2014-10-20 16:21:07 +02:00
freescale net: fec: fix MDIO bus assignement for dual fec SoC's 2015-01-14 00:27:10 -05:00
fujitsu
hisilicon
hp hp100: fix misspelling of current function in string 2014-12-09 16:18:47 -05:00
i825xx net: ethernet: i825xx: drop owner assignment from platform_drivers 2014-10-20 16:21:08 +02:00
ibm Driver core patches for 3.19-rc1 2014-12-14 16:10:09 -08:00
icplus
intel ixgbevf: Fix checksum error when using stacked vlan 2015-01-30 18:03:47 -08:00
marvell net: mv643xx_eth: Fix highmem support in non-TSO egress path 2015-01-26 16:14:40 -08:00
mellanox net/mlx4: Don't disable vxlan offloads under DMFS-A0 optimized steering 2015-01-15 19:35:30 -05:00
micrel net: ethernet: micrel: ksz884x.c: Remove unused function 2014-12-22 16:23:09 -05:00
microchip
moxa net: ethernet: moxa: drop owner assignment from platform_drivers 2014-10-20 16:21:10 +02:00
myricom myri10ge: fix error return code 2014-12-31 19:19:00 -05:00
natsemi Driver core patches for 3.19-rc1 2014-12-14 16:10:09 -08:00
neterion s2io: use snprintf() as a safety feature 2015-01-19 19:42:21 -05:00
nuvoton net: ethernet: nuvoton: drop owner assignment from platform_drivers 2014-10-20 16:21:10 +02:00
nvidia
nxp net: ethernet: Remove superfluous ether_setup after alloc_etherdev 2014-10-03 15:31:40 -07:00
octeon net: ethernet: octeon: drop owner assignment from platform_drivers 2014-10-20 16:21:11 +02:00
oki-semi
packetengines
pasemi net-PA Semi: Deletion of unnecessary checks before the function call "pci_dev_put" 2014-12-05 21:14:20 -08:00
qlogic netxen: fix netxen_nic_poll() logic 2015-01-25 00:21:45 -08:00
qualcomm net: qualcomm: Fix dependency 2014-11-11 18:12:32 -05:00
rdc
realtek 8139too: Add netif_napi_del in the driver 2014-12-22 16:31:58 -05:00
renesas sh_eth: Fix DMA-API usage for RX buffers 2015-01-27 00:18:54 -08:00
rocker rocker: remove swdev mode 2014-12-09 18:24:47 -05:00
samsung net: sxgbe: Fix waring for double kfree() 2015-01-15 19:01:10 -05:00
seeq net: ethernet: seeq: drop owner assignment from platform_drivers 2014-10-20 16:21:12 +02:00
sfc ethtool: Support for configurable RSS hash function 2014-12-08 21:07:10 -05:00
sgi net: ethernet: sgi: drop owner assignment from platform_drivers 2014-10-20 16:21:12 +02:00
silan
sis
smsc net: smc91x: Fix build without gpiolib 2014-12-15 11:46:54 -05:00
stmicro stmmac: prevent probe drivers to crash kernel 2015-01-27 12:24:30 -08:00
sun sunvnet: fix a memory leak in vnet_handle_offloads 2014-12-19 13:19:45 -05:00
tehuti
ti drivers: net: cpsw: discard dual emac default vlan configuration 2015-01-26 16:05:50 -08:00
tile Merge branch 'for-3.18-consistent-ops' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/percpu 2014-10-15 07:48:18 +02:00
toshiba net: spider_net: avoid using signed char for bitops 2014-10-05 21:15:16 -04:00
tundra net: ethernet: tundra: drop owner assignment from platform_drivers 2014-10-20 16:21:13 +02:00
via net: ethernet: via: drop owner assignment from platform_drivers 2014-10-20 16:21:14 +02:00
wiznet Driver core patches for 3.19-rc1 2014-12-14 16:10:09 -08:00
xilinx net: axienet: fix error return code 2014-12-31 19:19:00 -05:00
xircom
xscale
dnet.c net: dnet: fix dnet_poll() 2015-01-11 21:44:55 -05:00
dnet.h
ec_bhf.c
ethoc.c net: ethernet: drop owner assignment from platform_drivers 2014-10-20 16:21:02 +02:00
fealnx.c
jme.c jme: replace calls to redundant function 2014-12-12 15:15:41 -05:00
jme.h
Kconfig net: s6gmac: remove driver 2014-12-22 16:29:03 -05:00
korina.c
lantiq_etop.c net: ethernet: drop owner assignment from platform_drivers 2014-10-20 16:21:02 +02:00
Makefile net: s6gmac: remove driver 2014-12-22 16:29:03 -05:00
netx-eth.c net: ethernet: drop owner assignment from platform_drivers 2014-10-20 16:21:02 +02:00