diff options
Diffstat (limited to 'drivers/net/ethernet/broadcom/bcm63xx_enet.c')
| -rw-r--r-- | drivers/net/ethernet/broadcom/bcm63xx_enet.c | 8 | 
1 files changed, 6 insertions, 2 deletions
diff --git a/drivers/net/ethernet/broadcom/bcm63xx_enet.c b/drivers/net/ethernet/broadcom/bcm63xx_enet.c index fd8767213165..977f097fc7bf 100644 --- a/drivers/net/ethernet/broadcom/bcm63xx_enet.c +++ b/drivers/net/ethernet/broadcom/bcm63xx_enet.c @@ -1192,7 +1192,6 @@ static int bcm_enet_stop(struct net_device *dev)  	kdev = &priv->pdev->dev;  	netif_stop_queue(dev); -	netdev_reset_queue(dev);  	napi_disable(&priv->napi);  	if (priv->has_phy)  		phy_stop(dev->phydev); @@ -1231,6 +1230,9 @@ static int bcm_enet_stop(struct net_device *dev)  	if (priv->has_phy)  		phy_disconnect(dev->phydev); +	/* reset BQL after forced tx reclaim to prevent kernel panic */ +	netdev_reset_queue(dev); +  	return 0;  } @@ -2343,7 +2345,6 @@ static int bcm_enetsw_stop(struct net_device *dev)  	del_timer_sync(&priv->swphy_poll);  	netif_stop_queue(dev); -	netdev_reset_queue(dev);  	napi_disable(&priv->napi);  	del_timer_sync(&priv->rx_timeout); @@ -2371,6 +2372,9 @@ static int bcm_enetsw_stop(struct net_device *dev)  		free_irq(priv->irq_tx, dev);  	free_irq(priv->irq_rx, dev); +	/* reset BQL after forced tx reclaim to prevent kernel panic */ +	netdev_reset_queue(dev); +  	return 0;  }  | 
