linux_dsm_epyc7002/drivers/net/ethernet
Ben Hutchings 283e38db65 sh_eth: Fix serialisation of interrupt disable with interrupt & NAPI handlers
In order to stop the RX path accessing the RX ring while it's being
stopped or resized, we clear the interrupt mask (EESIPR) and then call
free_irq() or synchronise_irq().  This is insufficient because the
interrupt handler or NAPI poller may set EESIPR again after we clear
it.  Also, in sh_eth_set_ringparam() we currently don't disable NAPI
polling at all.

I could easily trigger a crash by running the loop:

   while ethtool -G eth0 rx 128 && ethtool -G eth0 rx 64; do echo -n .; done

and 'ping -f' toward the sh_eth port from another machine.

To fix this:
- Add a software flag (irq_enabled) to signal whether interrupts
  should be enabled
- In the interrupt handler, if the flag is clear then clear EESIPR
  and return
- In the NAPI poller, if the flag is clear then don't set EESIPR
- Set the flag before enabling interrupts in sh_eth_dev_init() and
  sh_eth_set_ringparam()
- Clear the flag and serialise with the interrupt and NAPI
  handlers before clearing EESIPR in sh_eth_close() and
  sh_eth_set_ringparam()

After this, I could run the loop for 100,000 iterations successfully.

Signed-off-by: Ben Hutchings <ben.hutchings@codethink.co.uk>
Signed-off-by: David S. Miller <davem@davemloft.net>
2015-01-26 16:13:15 -08:00
..
3com
8390 ne2k-pci: Add pci_disable_device in error handling 2014-12-27 02:20:55 -05:00
adaptec
adi
aeroflex
agere
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 amd-xgbe: Use proper Rx flow control register 2015-01-23 22:17:06 -08:00
apm
apple
arc
atheros alx: fix alx_poll() 2015-01-11 21:45:50 -05:00
broadcom bgmac: activate irqs only if there is nothing to poll 2015-01-19 15:59:57 -05: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
chelsio cxgb4vf: Fix queue allocation for 40G adapter 2015-01-14 16:48:08 -05:00
cirrus cirrus: cs89x0: fix time comparison 2014-12-15 11:44:21 -05: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
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
ibm Driver core patches for 3.19-rc1 2014-12-14 16:10:09 -08:00
icplus
intel i40e: adds FCoE configure option 2015-01-14 16:48:39 -05:00
marvell Driver core patches for 3.19-rc1 2014-12-14 16:10:09 -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
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
nvidia
nxp
octeon
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
rdc
realtek 8139too: Add netif_napi_del in the driver 2014-12-22 16:31:58 -05:00
renesas sh_eth: Fix serialisation of interrupt disable with interrupt & NAPI handlers 2015-01-26 16:13:15 -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
sfc ethtool: Support for configurable RSS hash function 2014-12-08 21:07:10 -05:00
sgi
silan
sis
smsc net: smc91x: Fix build without gpiolib 2014-12-15 11:46:54 -05:00
stmicro net: ethernet: stmicro: stmmac: drop owner assignment from platform_drivers 2014-12-22 16:30:00 -05: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
toshiba
tundra
via
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
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
Makefile net: s6gmac: remove driver 2014-12-22 16:29:03 -05:00
netx-eth.c