amd-xgbe: Clear all state during a device restart
When performing a device restart, like during an MTU change, sometimes the device queues still have data and get hung up trying to flush resulting in the device becoming unresponsive until brought down and back up. To prevent this, always perform a device reset during a restart. Signed-off-by: Tom Lendacky <thomas.lendacky@amd.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:

committed by
David S. Miller

parent
03e50fd7b1
commit
916102c666
@@ -927,7 +927,7 @@ static void xgbe_stop(struct xgbe_prv_data *pdata)
|
||||
DBGPR("<--xgbe_stop\n");
|
||||
}
|
||||
|
||||
static void xgbe_restart_dev(struct xgbe_prv_data *pdata, unsigned int reset)
|
||||
static void xgbe_restart_dev(struct xgbe_prv_data *pdata)
|
||||
{
|
||||
struct xgbe_channel *channel;
|
||||
struct xgbe_hw_if *hw_if = &pdata->hw_if;
|
||||
@@ -950,9 +950,8 @@ static void xgbe_restart_dev(struct xgbe_prv_data *pdata, unsigned int reset)
|
||||
xgbe_free_tx_data(pdata);
|
||||
xgbe_free_rx_data(pdata);
|
||||
|
||||
/* Issue software reset to device if requested */
|
||||
if (reset)
|
||||
hw_if->exit(pdata);
|
||||
/* Issue software reset to device */
|
||||
hw_if->exit(pdata);
|
||||
|
||||
xgbe_start(pdata);
|
||||
|
||||
@@ -967,7 +966,7 @@ static void xgbe_restart(struct work_struct *work)
|
||||
|
||||
rtnl_lock();
|
||||
|
||||
xgbe_restart_dev(pdata, 1);
|
||||
xgbe_restart_dev(pdata);
|
||||
|
||||
rtnl_unlock();
|
||||
}
|
||||
@@ -1587,7 +1586,7 @@ static int xgbe_change_mtu(struct net_device *netdev, int mtu)
|
||||
pdata->rx_buf_size = ret;
|
||||
netdev->mtu = mtu;
|
||||
|
||||
xgbe_restart_dev(pdata, 0);
|
||||
xgbe_restart_dev(pdata);
|
||||
|
||||
DBGPR("<--xgbe_change_mtu\n");
|
||||
|
||||
|
Reference in New Issue
Block a user