diff options
Diffstat (limited to 'drivers/net/ethernet/faraday/ftgmac100.c')
| -rw-r--r-- | drivers/net/ethernet/faraday/ftgmac100.c | 13 | 
1 files changed, 11 insertions, 2 deletions
| diff --git a/drivers/net/ethernet/faraday/ftgmac100.c b/drivers/net/ethernet/faraday/ftgmac100.c index c1deb6e5d26c..d5356db7539a 100644 --- a/drivers/net/ethernet/faraday/ftgmac100.c +++ b/drivers/net/ethernet/faraday/ftgmac100.c @@ -1402,8 +1402,17 @@ static void ftgmac100_adjust_link(struct net_device *netdev)  	/* Disable all interrupts */  	iowrite32(0, priv->base + FTGMAC100_OFFSET_IER); -	/* Reset the adapter asynchronously */ -	schedule_work(&priv->reset_task); +	/* Release phy lock to allow ftgmac100_reset to aquire it, keeping lock +	 * order consistent to prevent dead lock. +	 */ +	if (netdev->phydev) +		mutex_unlock(&netdev->phydev->lock); + +	ftgmac100_reset(priv); + +	if (netdev->phydev) +		mutex_lock(&netdev->phydev->lock); +  }  static int ftgmac100_mii_probe(struct net_device *netdev) |