bianbu-linux-6.6/drivers/net/ethernet
Doug Berger 09e805d257 net: bcmgenet: 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 bcmgenet_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 bcmgenet_netif_stop. There
are currently only two users of the bcmgenet_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 bcmgenet_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 bcmgenet_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 bcmgenet_netif_start. Since it wakes the transmit
queues it is not necessary to invoke netif_tx_start_all_queues from
bcmgenet_netif_start so it is moved into the driver open service.

Fixes: 1c1008c793 ("net: bcmgenet: add main driver file")
Signed-off-by: Doug Berger <opendmb@gmail.com>
Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2018-11-03 00:03:39 -07:00
..
3com
8390 net: ethernet: Use phy_set_max_speed() to limit advertised speed 2018-09-12 20:24:20 -07:00
adaptec
aeroflex net: ethernet: Use phy_set_max_speed() to limit advertised speed 2018-09-12 20:24:20 -07:00
agere net: ethernet: Use phy_set_max_speed() to limit advertised speed 2018-09-12 20:24:20 -07:00
alacritech net: ethernet: slicoss: remove duplicated include from slic.h 2018-09-18 19:57:40 -07:00
allwinner net: ethernet: Use phy_set_max_speed() to limit advertised speed 2018-09-12 20:24:20 -07:00
alteon
altera net: ethernet: Use phy_set_max_speed() to limit advertised speed 2018-09-12 20:24:20 -07:00
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 net: ethernet: Add helper to determine if pause configuration is supported 2018-09-12 20:24:21 -07:00
apple net: apple: fix return type of ndo_start_xmit function 2018-09-21 19:15:15 -07:00
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 net: ethernet: Add helper for set_pauseparam for Asym Pause 2018-09-12 20:24:21 -07:00
broadcom net: bcmgenet: protect stop from timeout 2018-11-03 00:03:39 -07:00
brocade bna: Remove unnecessary self assignment 2018-09-21 19:02:05 -07:00
cadence net: ethernet: cadence: fix socket buffer corruption problem 2018-10-25 11:32:24 -07:00
calxeda
cavium mlx5-updates-2018-10-03 2018-10-04 09:48:37 -07:00
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 net: cirrus: fix return type of ndo_start_xmit function 2018-09-21 19:15:14 -07:00
cisco
cortina net: ethernet: Add helper for MACs which support asym pause 2018-09-12 20:24:21 -07:00
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 net: faraday: fix return type of ndo_start_xmit function 2018-09-26 10:18:08 -07:00
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 net: hp100: fix always-true check for link up state 2018-09-17 07:55:19 -07:00
huawei hinic: Fix l4_type parameter in hinic_task_set_tunnel_l4 2018-10-29 20:43:40 -07:00
i825xx net: i825xx: fix return type of ndo_start_xmit function 2018-09-21 19:15:15 -07:00
ibm Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2018-10-03 21:00:17 -07:00
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 net: phy: Add helper for advertise to lcl value 2018-10-01 22:55:36 -07:00
mellanox mlxsw: spectrum: Set minimum shaper on MC TCs 2018-10-31 12:56:58 -07:00
micrel net: micrel: fix return type of ndo_start_xmit function 2018-09-21 19:11:39 -07:00
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 net: neterion: vxge: Remove unnecessary parentheses 2018-09-21 19:00:09 -07:00
netronome Merge git://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next 2018-10-21 21:11:46 -07:00
ni net: nixge: Address compiler warnings when building for i386 2018-10-01 22:48:08 -07:00
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 Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2018-10-03 21:00:17 -07:00
rdc net: ethernet: Use phy_set_max_speed() to limit advertised speed 2018-09-12 20:24:20 -07:00
realtek r8169: fix broken Wake-on-LAN from S5 (poweroff) 2018-10-25 16:15:23 -07:00
renesas Merge ra.kernel.org:/pub/scm/linux/kernel/git/davem/net 2018-09-25 10:35:29 -07:00
rocker rocker: Drop pointless static qualifier 2018-10-19 10:42:19 -07:00
samsung net: ethernet: Use phy_set_max_speed() to limit advertised speed 2018-09-12 20:24:20 -07:00
seeq net: seeq: fix return type of ndo_start_xmit function 2018-09-21 19:15:14 -07:00
sfc pci-v4.20-changes 2018-10-25 06:50:48 -07:00
sgi net: sgi: fix return type of ndo_start_xmit function 2018-09-21 19:15:14 -07:00
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 net: sun: fix return type of ndo_start_xmit function 2018-09-19 21:17:58 -07:00
synopsys
tehuti
ti net: ethernet: ti: cpsw: unsync mcast entries while switch promisc mode 2018-10-22 20:20:14 -07:00
toshiba net: toshiba: remove a redundant local variable 'index_specified' 2018-09-19 23:08:36 -07:00
tundra
via
wiznet net: ethernet: wiznet: w5300: simplify getting .driver_data 2018-10-21 21:10:12 -07:00
xilinx net: xilinx: fix return type of ndo_start_xmit function 2018-09-19 21:17:58 -07:00
xircom
xscale
dnet.c net: ethernet: Add helper for MACs which support asym pause 2018-09-12 20:24:21 -07:00
dnet.h
ec_bhf.c
ethoc.c net: ethernet: Use phy_set_max_speed() to limit advertised speed 2018-09-12 20:24:20 -07:00
fealnx.c
jme.c
jme.h
Kconfig net: lantiq: Add Lantiq / Intel VRX200 Ethernet driver 2018-09-13 08:14:33 -07:00
korina.c
lantiq_etop.c MIPS: lantiq: Do not enable IRQs in dma open 2018-09-13 08:14:33 -07:00
lantiq_xrx200.c net: lantiq: lantiq_xrx200: Move clock prepare to probe function 2018-09-17 08:12:11 -07:00
Makefile net: lantiq: Add Lantiq / Intel VRX200 Ethernet driver 2018-09-13 08:14:33 -07:00
netx-eth.c