[PATCH 21/27] UBUNTU: SAUCE: net/phy: abort genphy_read_status when link changes during speed and duplex reading
Madalin Bucur
bcollins at ubuntu.com
Mon Jun 11 23:02:47 UTC 2012
If the link changes during speed and duplex reading the values may be out of sync;
abort the update if the link state changes during the read
This patch is being maintained and will eventually be merged upstream by
Freescale directly. The powerpc-e500mc flavour uses this.
Signed-off-by: Madalin Bucur <madalin.bucur at freescale.com>
Signed-off-by: Ben Collins <bcollins at ubuntu.com>
---
drivers/net/phy/phy_device.c | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/drivers/net/phy/phy_device.c b/drivers/net/phy/phy_device.c
index f53bc32..163e1e7 100644
--- a/drivers/net/phy/phy_device.c
+++ b/drivers/net/phy/phy_device.c
@@ -808,6 +808,16 @@ int genphy_read_status(struct phy_device *phydev)
lpa &= adv;
+ err = phy_read(phydev, MII_BMSR);
+
+ if (err < 0)
+ return err;
+
+ /* if the link changed while reading speed and duplex
+ * abort the speed and duplex update */
+ if (((err & BMSR_LSTATUS) == 0) != (phydev->link == 0))
+ return 0;
+
phydev->speed = SPEED_10;
phydev->duplex = DUPLEX_HALF;
phydev->pause = phydev->asym_pause = 0;
--
1.7.9.5
More information about the kernel-team
mailing list