Message ID | 1317919737-25893-1-git-send-email-madalin.bucur@freescale.com |
---|---|
State | Not Applicable, archived |
Delegated to: | David Miller |
Headers | show |
diff --git a/drivers/net/phy/phy_device.c b/drivers/net/phy/phy_device.c index a1e132c..e88f49a 100644 --- a/drivers/net/phy/phy_device.c +++ b/drivers/net/phy/phy_device.c @@ -824,6 +824,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;
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 Signed-off-by: Madalin Bucur <madalin.bucur@freescale.com> --- drivers/net/phy/phy_device.c | 10 ++++++++++ 1 files changed, 10 insertions(+), 0 deletions(-)