linux_dsm_epyc7002/drivers/net/phy
Zefir Kurtisi 811a919135 phy state machine: failsafe leave invalid RUNNING state
While in RUNNING state, phy_state_machine() checks for link changes by
comparing phydev->link before and after calling phy_read_status().
This works as long as it is guaranteed that phydev->link is never
changed outside the phy_state_machine().

If in some setups this happens, it causes the state machine to miss
a link loss and remain RUNNING despite phydev->link being 0.

This has been observed running a dsa setup with a process continuously
polling the link states over ethtool each second (SNMPD RFC-1213
agent). Disconnecting the link on a phy followed by a ETHTOOL_GSET
causes dsa_slave_get_settings() / dsa_slave_get_link_ksettings() to
call phy_read_status() and with that modify the link status - and
with that bricking the phy state machine.

This patch adds a fail-safe check while in RUNNING, which causes to
move to CHANGELINK when the link is gone and we are still RUNNING.

Signed-off-by: Zefir Kurtisi <zefir.kurtisi@neratec.com>
Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2017-01-09 15:37:44 -05:00
..
amd.c phy: Centralize setting driver module owner 2016-01-07 14:31:27 -05:00
aquantia.c net: phy: aquantia: add PHY ID of AQR106 and AQR107 2016-10-20 14:25:23 -04:00
at803x.c Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2016-10-30 12:42:58 -04:00
bcm7xxx.c net: phy: phy drivers should not set SUPPORTED_[Asym_]Pause 2016-12-10 23:31:19 -05:00
bcm63xx.c phy: Centralize setting driver module owner 2016-01-07 14:31:27 -05:00
bcm87xx.c phy: Centralize setting driver module owner 2016-01-07 14:31:27 -05:00
bcm-cygnus.c net: phy: phy drivers should not set SUPPORTED_[Asym_]Pause 2016-12-10 23:31:19 -05:00
bcm-phy-lib.c net: phy: broadcom: Add support code for reading PHY counters 2016-11-30 10:22:27 -05:00
bcm-phy-lib.h net: phy: broadcom: Add support code for reading PHY counters 2016-11-30 10:22:27 -05:00
broadcom.c net: phy: phy drivers should not set SUPPORTED_[Asym_]Pause 2016-12-10 23:31:19 -05:00
cicada.c phy: Centralize setting driver module owner 2016-01-07 14:31:27 -05:00
davicom.c Replace <asm/uaccess.h> with <linux/uaccess.h> globally 2016-12-24 11:46:01 -08:00
dp83640_reg.h
dp83640.c ptp: dp83640: Use the high resolution frequency method. 2016-11-09 21:19:53 -05:00
dp83848.c net: phy: phy drivers should not set SUPPORTED_[Asym_]Pause 2016-12-10 23:31:19 -05:00
dp83867.c net: phy: dp83867: fix irq generation 2017-01-06 15:52:43 -05:00
et1011c.c phy: Centralize setting driver module owner 2016-01-07 14:31:27 -05:00
fixed_phy.c net: phy: fixed_phy: fix of_node leak in fixed_phy_unregister 2016-11-17 12:05:05 -05:00
icplus.c Replace <asm/uaccess.h> with <linux/uaccess.h> globally 2016-12-24 11:46:01 -08:00
intel-xway.c net: phy: phy drivers should not set SUPPORTED_[Asym_]Pause 2016-12-10 23:31:19 -05:00
Kconfig net: phy: Add Meson GXL Internal PHY driver 2016-11-09 12:50:55 -05:00
lxt.c Replace <asm/uaccess.h> with <linux/uaccess.h> globally 2016-12-24 11:46:01 -08:00
Makefile net: phy: Add Meson GXL Internal PHY driver 2016-11-09 12:50:55 -05:00
marvell.c net: phy: Fix the mdix_ctrl changes 2016-12-01 11:26:48 -05:00
mdio_bus.c net/phy: add trace events for mdio accesses 2016-11-24 11:55:43 -05:00
mdio_device.c mdio: Demote print from info to debug in mdio_driver_register 2016-11-14 16:40:16 -05:00
mdio-bcm-iproc.c net: phy: Broadcom iProc MDIO bus driver 2015-10-08 04:44:46 -07:00
mdio-bcm-unimac.c mdio: Move allocation of interrupts into core 2016-01-07 14:31:26 -05:00
mdio-bitbang.c net: phy: mdio-gpio: Handle phy_ignore_ta_mask 2015-05-14 13:40:55 -04:00
mdio-cavium.c phy: mdio-cavium: Add missing MODULE_* annotations. 2016-03-16 19:55:37 -04:00
mdio-cavium.h phy: mdio-octeon: Refactor into two files/modules 2016-03-14 15:27:22 -04:00
mdio-gpio.c mdio: Move allocation of interrupts into core 2016-01-07 14:31:26 -05:00
mdio-hisi-femac.c net: Add MDIO bus driver for the Hisilicon FEMAC 2016-07-16 21:32:58 -07:00
mdio-moxart.c mdio: Move allocation of interrupts into core 2016-01-07 14:31:26 -05:00
mdio-mux-bcm-iproc.c net: mdio-mux: Add MDIO mux driver for iProc SoCs 2016-06-10 23:24:54 -07:00
mdio-mux-gpio.c mdio: mux: Enhanced MDIO mux framework for integrated multiplexers 2016-06-10 23:24:53 -07:00
mdio-mux-mmioreg.c net: mdio-mux-mmioreg: Add support for 16bit and 32bit register sizes 2016-11-09 12:50:55 -05:00
mdio-mux.c mdio: mux: avoid 'maybe-uninitialized' warning 2016-06-15 20:48:52 -07:00
mdio-octeon.c phy: mdio-octeon: Refactor into two files/modules 2016-03-14 15:27:22 -04:00
mdio-sun4i.c mdio-sun4i: oops in error handling in probe 2016-03-21 11:30:01 -04:00
mdio-thunder.c phy: mdio-thunder: Add driver for Cavium Thunder SoC MDIO buses. 2016-03-14 15:27:22 -04:00
mdio-xgene.c drivers: net: phy: xgene: Fix 'remove' function 2016-09-13 12:04:11 -04:00
mdio-xgene.h drivers: net: phy: xgene: Add MDIO driver 2016-07-25 21:51:43 -07:00
meson-gxl.c net: phy: Add Meson GXL Internal PHY driver 2016-11-09 12:50:55 -05:00
micrel.c net: phy: phy drivers should not set SUPPORTED_[Asym_]Pause 2016-12-10 23:31:19 -05:00
microchip.c net: phy: phy drivers should not set SUPPORTED_[Asym_]Pause 2016-12-10 23:31:19 -05:00
mscc.c net: phy: Add mdi(x) support in Microsemi PHYs driver 2016-12-01 11:26:47 -05:00
national.c net: phy: phy drivers should not set SUPPORTED_[Asym_]Pause 2016-12-10 23:31:19 -05:00
phy_device.c net: phy: use boolean dt properties for eee broken modes 2016-12-20 13:50:50 -05:00
phy_led_triggers.c phy: fix error case of phy_led_triggers_(un)register 2016-11-25 19:57:57 -05:00
phy.c phy state machine: failsafe leave invalid RUNNING state 2017-01-09 15:37:44 -05:00
qsemi.c Replace <asm/uaccess.h> with <linux/uaccess.h> globally 2016-12-24 11:46:01 -08:00
realtek.c net: phy: realtek: fix enabling of the TX-delay for RTL8211F 2016-11-28 12:06:54 -05:00
smsc.c net: phy: phy drivers should not set SUPPORTED_[Asym_]Pause 2016-12-10 23:31:19 -05:00
spi_ks8995.c net: phy: spi_ks8895: Don't leak references to SPI devices 2016-04-21 15:00:27 -04:00
ste10Xp.c phy: Centralize setting driver module owner 2016-01-07 14:31:27 -05:00
swphy.c phy: generate swphy registers on the fly 2016-06-27 10:40:57 -04:00
swphy.h phy: generate swphy registers on the fly 2016-06-27 10:40:57 -04:00
teranetics.c phy: Centralize setting driver module owner 2016-01-07 14:31:27 -05:00
vitesse.c net: phy: vitesse: add support for VSC8572 2016-12-02 10:36:47 -05:00
xilinx_gmii2rgmii.c net: phy: xgmiitorgmii: Fix non static symbol warning 2016-08-23 17:17:48 -07:00