• Florian Fainelli's avatar
    net: phy: Fix phy_mac_interrupt() · d23a77e3
    Florian Fainelli authored
    commit deccd16f upstream.
    
    Commit 5ea94e76 ("phy: add phy_mac_interrupt()") to use with
    PHY_IGNORE_INTERRUPT added a cancel_work_sync() into phy_mac_interrupt()
    which is allowed to sleep, whereas phy_mac_interrupt() is expected to be
    callable from interrupt context.
    
    Now that we have fixed how the PHY state machine treats
    PHY_IGNORE_INTERRUPT with respect to state changes, we can just set the
    new link state, and queue the PHY state machine for execution so it is
    going to read the new link state.
    
    For that to work properly, we need to update phy_change() not to try to
    invoke any interrupt callbacks if we have configured the PHY device for
    PHY_IGNORE_INTERRUPT, because that PHY device and its driver are not
    required to implement those.
    
    Fixes: 5ea94e76 ("phy: add phy_mac_interrupt() to use with PHY_IGNORE_INTERRUPT")
    Signed-off-by: default avatarFlorian Fainelli <f.fainelli@gmail.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    Signed-off-by: default avatarLuis Henriques <luis.henriques@canonical.com>
    d23a77e3
phy.c 29.3 KB