Commit 22cb99fb authored by David S. Miller's avatar David S. Miller

Merge branch 'mlx5-fixes'

Saeed Mahameed says:

====================
mlx5 tx timeout watchdog fixes

This patch set provides two trivial fixes for the tx timeout series lately
applied into net 4.7.

From Daniel, detect stuck queues due to BQL
From Mohamad, fix tx timeout watchdog false alarm

Hopefully those two fixes will make it to -stable, assuming
3947ca18 ('net/mlx5e: Implement ndo_tx_timeout callback') was also backported to -stable.
====================
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parents ea43f860 c3b7c5c9
...@@ -1348,6 +1348,11 @@ static int mlx5e_open_channels(struct mlx5e_priv *priv) ...@@ -1348,6 +1348,11 @@ static int mlx5e_open_channels(struct mlx5e_priv *priv)
goto err_close_channels; goto err_close_channels;
} }
/* FIXME: This is a W/A for tx timeout watch dog false alarm when
* polling for inactive tx queues.
*/
netif_tx_start_all_queues(priv->netdev);
kfree(cparam); kfree(cparam);
return 0; return 0;
...@@ -1367,6 +1372,12 @@ static void mlx5e_close_channels(struct mlx5e_priv *priv) ...@@ -1367,6 +1372,12 @@ static void mlx5e_close_channels(struct mlx5e_priv *priv)
{ {
int i; int i;
/* FIXME: This is a W/A only for tx timeout watch dog false alarm when
* polling for inactive tx queues.
*/
netif_tx_stop_all_queues(priv->netdev);
netif_tx_disable(priv->netdev);
for (i = 0; i < priv->params.num_channels; i++) for (i = 0; i < priv->params.num_channels; i++)
mlx5e_close_channel(priv->channel[i]); mlx5e_close_channel(priv->channel[i]);
...@@ -2656,7 +2667,7 @@ static void mlx5e_tx_timeout(struct net_device *dev) ...@@ -2656,7 +2667,7 @@ static void mlx5e_tx_timeout(struct net_device *dev)
for (i = 0; i < priv->params.num_channels * priv->params.num_tc; i++) { for (i = 0; i < priv->params.num_channels * priv->params.num_tc; i++) {
struct mlx5e_sq *sq = priv->txq_to_sq_map[i]; struct mlx5e_sq *sq = priv->txq_to_sq_map[i];
if (!netif_tx_queue_stopped(netdev_get_tx_queue(dev, i))) if (!netif_xmit_stopped(netdev_get_tx_queue(dev, i)))
continue; continue;
sched_work = true; sched_work = true;
set_bit(MLX5E_SQ_STATE_TX_TIMEOUT, &sq->state); set_bit(MLX5E_SQ_STATE_TX_TIMEOUT, &sq->state);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment