linux/drivers/net/ethernet
Florian Fainelli 7cb6a2a2c7 net: systemport: Protect stop from timeout
A timing hazard exists when the network interface is stopped that
allows a watchdog timeout to be processed by a separate core in
parallel. This creates the potential for the timeout handler to
wake the queues while the driver is shutting down, or access
registers after their clocks have been removed.

The more common case is that the watchdog timeout will produce a
warning message which doesn't lead to a crash. The chances of this
are greatly increased by the fact that bcm_sysport_netif_stop stops
the transmit queues which can easily precipitate a watchdog time-
out because of stale trans_start data in the queues.

This commit corrects the behavior by ensuring that the watchdog
timeout is disabled before enterring bcm_sysport_netif_stop. There
are currently only two users of the bcm_sysport_netif_stop function:
close and suspend.

The close case already handles the issue by exiting the RUNNING
state before invoking the driver close service.

The suspend case now performs the netif_device_detach to exit the
PRESENT state before the call to bcm_sysport_netif_stop rather than
after it.

These behaviors prevent any future scheduling of the driver timeout
service during the window. The netif_tx_stop_all_queues function
in bcm_sysport_netif_stop is replaced with netif_tx_disable to ensure
synchronization with any transmit or timeout threads that may
already be executing on other cores.

For symmetry, the netif_device_attach call upon resume is moved to
after the call to bcm_sysport_netif_start. Since it wakes the transmit
queues it is not necessary to invoke netif_tx_start_all_queues from
bcm_sysport_netif_start so it is moved into the driver open service.

Fixes: 40755a0fce ("net: systemport: add suspend and resume support")
Fixes: 80105befdb ("net: systemport: add Broadcom SYSTEMPORT Ethernet MAC driver")
Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2018-11-03 00:03:40 -07:00
..
3com
8390
adaptec
aeroflex
agere
alacritech
allwinner
alteon
altera
amazon net: ena: fix compilation error in xtensa architecture 2018-10-22 19:48:04 -07:00
amd drivers: net: remove <net/busy_poll.h> inclusion when not needed 2018-10-25 16:20:02 -07:00
apm
apple
aquantia net: aquantia: make function aq_fw2x_update_stats static 2018-10-16 10:00:07 -07:00
arc
atheros pci-v4.20-changes 2018-10-25 06:50:48 -07:00
aurora
broadcom net: systemport: Protect stop from timeout 2018-11-03 00:03:40 -07:00
brocade
cadence net: ethernet: cadence: fix socket buffer corruption problem 2018-10-25 11:32:24 -07:00
calxeda
cavium
chelsio Merge branch 'linus' of git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6 2018-10-25 16:43:35 -07:00
cirrus
cisco
cortina
davicom net: ethernet: davicom: dm9000: simplify getting .driver_data 2018-10-21 21:10:12 -07:00
dec
dlink
emulex pci-v4.20-changes 2018-10-25 06:50:48 -07:00
ezchip
faraday
freescale Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2018-10-19 11:03:06 -07:00
fujitsu
hisilicon net: hns3: bugfix for rtnl_lock's range in the hclgevf_reset() 2018-10-31 12:42:38 -07:00
hp
huawei hinic: Fix l4_type parameter in hinic_task_set_tunnel_l4 2018-10-29 20:43:40 -07:00
i825xx
ibm
intel ixgbe: fix MAC anti-spoofing filter after VFLR 2018-10-31 11:05:51 -07:00
marvell net: mvpp2: Fix affinity hint allocation 2018-10-30 11:34:41 -07:00
mediatek
mellanox mlxsw: spectrum: Set minimum shaper on MC TCs 2018-10-31 12:56:58 -07:00
micrel
microchip lan743x: Remove SPI dependency from Microchip group. 2018-10-25 16:20:48 -07:00
moxa
mscc Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2018-10-19 11:03:06 -07:00
myricom drivers: net: remove <net/busy_poll.h> inclusion when not needed 2018-10-25 16:20:02 -07:00
natsemi
neterion
netronome Merge git://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next 2018-10-21 21:11:46 -07:00
ni
nuvoton
nvidia
nxp net: ethernet: lpc_eth: add device and device node local variables 2018-10-19 17:04:38 -07:00
oki-semi
packetengines
pasemi
qlogic pci-v4.20-changes 2018-10-25 06:50:48 -07:00
qualcomm
rdc
realtek r8169: fix broken Wake-on-LAN from S5 (poweroff) 2018-10-25 16:15:23 -07:00
renesas
rocker rocker: Drop pointless static qualifier 2018-10-19 10:42:19 -07:00
samsung
seeq
sfc pci-v4.20-changes 2018-10-25 06:50:48 -07:00
sgi
silan
sis
smsc net: ethernet: smsc: smc91x: simplify getting .driver_data 2018-10-21 21:10:12 -07:00
socionext net: socionext: Reset tx queue in ndo_stop 2018-10-23 10:55:35 -07:00
stmicro net: stmmac: Fix stmmac_mdio_reset() when building stmmac as modules 2018-10-31 18:35:58 -07:00
sun
synopsys
tehuti
ti net: ethernet: ti: cpsw: unsync mcast entries while switch promisc mode 2018-10-22 20:20:14 -07:00
toshiba
tundra
via
wiznet net: ethernet: wiznet: w5300: simplify getting .driver_data 2018-10-21 21:10:12 -07:00
xilinx
xircom
xscale
dnet.c
dnet.h
ec_bhf.c
ethoc.c
fealnx.c
jme.c
jme.h
Kconfig
korina.c
lantiq_etop.c
lantiq_xrx200.c
Makefile
netx-eth.c