mirror of https://gitee.com/openkylin/linux.git
net: phy: ensure phylib state machine is stopped after calling phy_stop
The call to the phylib state machine in phy_stop() just ensures that the state machine isn't re-triggered, but a state machine call may be scheduled already. So lets's call phy_stop_machine(). This also allows to get rid of the call to phy_stop_machine() in phy_disconnect(). Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com> Reviewed-by: Andrew Lunn <andrew@lunn.ch> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
472115d983
commit
cbfd12b3e8
|
@ -858,6 +858,7 @@ void phy_stop(struct phy_device *phydev)
|
||||||
mutex_unlock(&phydev->lock);
|
mutex_unlock(&phydev->lock);
|
||||||
|
|
||||||
phy_state_machine(&phydev->state_queue.work);
|
phy_state_machine(&phydev->state_queue.work);
|
||||||
|
phy_stop_machine(phydev);
|
||||||
|
|
||||||
/* Cannot call flush_scheduled_work() here as desired because
|
/* Cannot call flush_scheduled_work() here as desired because
|
||||||
* of rtnl_lock(), but PHY_HALTED shall guarantee irq handler
|
* of rtnl_lock(), but PHY_HALTED shall guarantee irq handler
|
||||||
|
|
|
@ -1005,8 +1005,6 @@ void phy_disconnect(struct phy_device *phydev)
|
||||||
if (phydev->irq > 0)
|
if (phydev->irq > 0)
|
||||||
phy_stop_interrupts(phydev);
|
phy_stop_interrupts(phydev);
|
||||||
|
|
||||||
phy_stop_machine(phydev);
|
|
||||||
|
|
||||||
phydev->adjust_link = NULL;
|
phydev->adjust_link = NULL;
|
||||||
|
|
||||||
phy_detach(phydev);
|
phy_detach(phydev);
|
||||||
|
|
Loading…
Reference in New Issue