linux/drivers/net/ethernet
Florian Fainelli 5701659004 net: stmmac: Fix race between stmmac_drv_probe and stmmac_open
There is currently a small window during which the network device registered by
stmmac can be made visible, yet all resources, including and clock and MDIO bus
have not had a chance to be set up, this can lead to the following error to
occur:

[  473.919358] stmmaceth 0000:01:00.0 (unnamed net_device) (uninitialized):
                stmmac_dvr_probe: warning: cannot get CSR clock
[  473.919382] stmmaceth 0000:01:00.0: no reset control found
[  473.919412] stmmac - user ID: 0x10, Synopsys ID: 0x42
[  473.919429] stmmaceth 0000:01:00.0: DMA HW capability register supported
[  473.919436] stmmaceth 0000:01:00.0: RX Checksum Offload Engine supported
[  473.919443] stmmaceth 0000:01:00.0: TX Checksum insertion supported
[  473.919451] stmmaceth 0000:01:00.0 (unnamed net_device) (uninitialized):
                Enable RX Mitigation via HW Watchdog Timer
[  473.921395] libphy: PHY stmmac-1:00 not found
[  473.921417] stmmaceth 0000:01:00.0 eth0: Could not attach to PHY
[  473.921427] stmmaceth 0000:01:00.0 eth0: stmmac_open: Cannot attach to
                PHY (error: -19)
[  473.959710] libphy: stmmac: probed
[  473.959724] stmmaceth 0000:01:00.0 eth0: PHY ID 01410cc2 at 0 IRQ POLL
                (stmmac-1:00) active
[  473.959728] stmmaceth 0000:01:00.0 eth0: PHY ID 01410cc2 at 1 IRQ POLL
                (stmmac-1:01)
[  473.959731] stmmaceth 0000:01:00.0 eth0: PHY ID 01410cc2 at 2 IRQ POLL
                (stmmac-1:02)
[  473.959734] stmmaceth 0000:01:00.0 eth0: PHY ID 01410cc2 at 3 IRQ POLL
                (stmmac-1:03)

Fix this by making sure that register_netdev() is the last thing being done,
which guarantees that the clock and the MDIO bus are available.

Fixes: 4bfcbd7abc ("stmmac: Move the mdio_register/_unregister in probe/remove")
Reported-by: Kweh, Hock Leong <hock.leong.kweh@intel.com>
Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2016-12-27 21:31:41 -05:00
..
3com Replace <asm/uaccess.h> with <linux/uaccess.h> globally 2016-12-24 11:46:01 -08:00
8390 Replace <asm/uaccess.h> with <linux/uaccess.h> globally 2016-12-24 11:46:01 -08:00
adaptec Replace <asm/uaccess.h> with <linux/uaccess.h> globally 2016-12-24 11:46:01 -08:00
adi Merge branch 'timers-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip 2016-12-12 19:56:15 -08:00
aeroflex
agere
alacritech Staging/IIO patches for 4.10-rc1 2016-12-13 11:35:00 -08:00
allwinner
alteon Replace <asm/uaccess.h> with <linux/uaccess.h> globally 2016-12-24 11:46:01 -08:00
altera Makefile: drop -D__CHECK_ENDIAN__ from cflags 2016-12-16 00:13:43 +02:00
amazon
amd clocksource: Use a plain u64 instead of cycle_t 2016-12-25 11:04:12 +01:00
apm net: xgene: avoid bogus maybe-uninitialized warning 2016-12-08 21:30:54 -05:00
apple
arc
atheros Makefile: drop -D__CHECK_ENDIAN__ from cflags 2016-12-16 00:13:43 +02:00
aurora
broadcom clocksource: Use a plain u64 instead of cycle_t 2016-12-25 11:04:12 +01:00
brocade bna: use designated initializers 2016-12-17 11:56:57 -05:00
cadence net: macb: Added PCI wrapper for Platform Driver. 2016-12-17 10:24:33 -05:00
calxeda
cavium net: ethernet: cavium: octeon: octeon_mgmt: Handle return NULL error from devm_ioremap 2016-12-19 11:03:34 -05:00
chelsio Replace <asm/uaccess.h> with <linux/uaccess.h> globally 2016-12-24 11:46:01 -08:00
cirrus net: cirrus: ep93xx: use new api ethtool_{get|set}_link_ksettings 2016-12-17 21:31:41 -05:00
cisco
davicom net: davicom: dm9000: use new api ethtool_{get|set}_link_ksettings 2016-12-17 21:31:41 -05:00
dec Replace <asm/uaccess.h> with <linux/uaccess.h> globally 2016-12-24 11:46:01 -08:00
dlink Replace <asm/uaccess.h> with <linux/uaccess.h> globally 2016-12-24 11:46:01 -08:00
emulex be2net: Increase skb headroom size to 256 bytes 2016-12-21 13:23:05 -05:00
ezchip
faraday
freescale clocksource: Use a plain u64 instead of cycle_t 2016-12-25 11:04:12 +01:00
fujitsu Replace <asm/uaccess.h> with <linux/uaccess.h> globally 2016-12-24 11:46:01 -08:00
hisilicon net: hix5hd2_gmac: fix compatible strings name 2016-12-20 14:12:29 -05:00
hp
i825xx
ibm Replace <asm/uaccess.h> with <linux/uaccess.h> globally 2016-12-24 11:46:01 -08:00
intel clocksource: Use a plain u64 instead of cycle_t 2016-12-25 11:04:12 +01:00
marvell ktime: Cleanup ktime_set() usage 2016-12-25 17:21:22 +01:00
mediatek
mellanox Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2016-12-27 16:04:37 -08:00
micrel
microchip encx24j600: Fix some checkstyle warnings 2016-12-16 13:31:47 -05:00
moxa
myricom
natsemi Replace <asm/uaccess.h> with <linux/uaccess.h> globally 2016-12-24 11:46:01 -08:00
neterion
netronome bpf: xdp: Allow head adjustment in XDP prog 2016-12-08 14:25:13 -05:00
nuvoton
nvidia
nxp
oki-semi
packetengines Replace <asm/uaccess.h> with <linux/uaccess.h> globally 2016-12-24 11:46:01 -08:00
pasemi
qlogic Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2016-12-17 20:17:04 -08:00
qualcomm net: qcom/emac: don't try to claim clocks on ACPI systems 2016-12-17 10:22:14 -05:00
rdc r6040: move spinlock in r6040_close as SOFTIRQ-unsafe lock order detected 2016-12-17 21:35:12 -05:00
realtek Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2016-12-27 16:04:37 -08:00
renesas Merge branch 'timers-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip 2016-12-12 19:56:15 -08:00
rocker
samsung Merge branch 'timers-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip 2016-12-12 19:56:15 -08:00
seeq
sfc ethernet: sfc: Add Kconfig entry for vendor Solarflare 2016-12-20 14:19:38 -05:00
sgi Replace <asm/uaccess.h> with <linux/uaccess.h> globally 2016-12-24 11:46:01 -08:00
silan
sis Replace <asm/uaccess.h> with <linux/uaccess.h> globally 2016-12-24 11:46:01 -08:00
smsc Replace <asm/uaccess.h> with <linux/uaccess.h> globally 2016-12-24 11:46:01 -08:00
stmicro net: stmmac: Fix race between stmmac_drv_probe and stmmac_open 2016-12-27 21:31:41 -05:00
sun Replace <asm/uaccess.h> with <linux/uaccess.h> globally 2016-12-24 11:46:01 -08:00
synopsys
tehuti
ti clocksource: Use a plain u64 instead of cycle_t 2016-12-25 11:04:12 +01:00
tile ktime: Cleanup ktime_set() usage 2016-12-25 17:21:22 +01:00
toshiba
tundra
via Replace <asm/uaccess.h> with <linux/uaccess.h> globally 2016-12-24 11:46:01 -08:00
wiznet
xilinx net: ll_temac: Utilize of_get_mac_address() 2016-12-08 11:34:03 -05:00
xircom Replace <asm/uaccess.h> with <linux/uaccess.h> globally 2016-12-24 11:46:01 -08:00
xscale
dnet.c
dnet.h
ec_bhf.c ktime: Cleanup ktime_set() usage 2016-12-25 17:21:22 +01:00
ethoc.c
fealnx.c Replace <asm/uaccess.h> with <linux/uaccess.h> globally 2016-12-24 11:46:01 -08:00
jme.c
jme.h
Kconfig ethernet: sfc: Add Kconfig entry for vendor Solarflare 2016-12-20 14:19:38 -05:00
korina.c net: korina: Fix NAPI versus resources freeing 2016-12-26 11:26:16 -05:00
lantiq_etop.c Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2016-12-10 16:21:55 -05:00
Makefile
netx-eth.c