• Heiner Kallweit's avatar
    net: phy: consider latched link-down status in polling mode · 93c09704
    Heiner Kallweit authored
    The link status value latches link-down events. To get the current
    status we read the register twice in genphy_update_link(). There's
    a potential risk that we miss a link-down event in polling mode.
    This may cause issues if the user e.g. connects his machine to a
    different network.
    
    On the other hand reading the latched value may cause issues in
    interrupt mode. Following scenario:
    
    - After boot link goes up
    - phy_start() is called triggering an aneg restart, hence link goes
      down and link-down info is latched.
    - After aneg has finished link goes up and triggers an interrupt.
      Interrupt handler reads link status, means it reads the latched
      "link is down" info. But there won't be another interrupt as long
      as link stays up, therefore phylib will never recognize that link
      is up.
    
    Deal with both scenarios by reading the register twice in interrupt
    mode only.
    Signed-off-by: default avatarHeiner Kallweit <hkallweit1@gmail.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    93c09704
phy_device.c 62.8 KB