Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 41b74920 authored by Tom Herbert's avatar Tom Herbert Committed by David S. Miller
Browse files

mlx4_en: Fix BQL reset TX queue call point



Fix issue in Mellanox driver related to BQL.  netdev_tx_reset_queue
was not being called in certain situations where the device was
being start and stopped.  Moved netdev_tx_reset_queue from the reset
device path to mlx4_en_free_tx_buf which is where the rings are
cleaned in a reset (specifically from device being stopped).

Signed-off-by: default avatarTom Herbert <therbert@google.com>
Acked-By: default avatarAmir Vadai <amirv@mellanox.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 2de27f30
Loading
Loading
Loading
Loading
+0 −3
Original line number Original line Diff line number Diff line
@@ -1685,15 +1685,12 @@ static void mlx4_en_restart(struct work_struct *work)
						 watchdog_task);
						 watchdog_task);
	struct mlx4_en_dev *mdev = priv->mdev;
	struct mlx4_en_dev *mdev = priv->mdev;
	struct net_device *dev = priv->dev;
	struct net_device *dev = priv->dev;
	int i;


	en_dbg(DRV, priv, "Watchdog task called for port %d\n", priv->port);
	en_dbg(DRV, priv, "Watchdog task called for port %d\n", priv->port);


	mutex_lock(&mdev->state_lock);
	mutex_lock(&mdev->state_lock);
	if (priv->port_up) {
	if (priv->port_up) {
		mlx4_en_stop_port(dev, 1);
		mlx4_en_stop_port(dev, 1);
		for (i = 0; i < priv->tx_ring_num; i++)
			netdev_tx_reset_queue(priv->tx_ring[i].tx_queue);
		if (mlx4_en_start_port(dev))
		if (mlx4_en_start_port(dev))
			en_err(priv, "Failed restarting port %d\n", priv->port);
			en_err(priv, "Failed restarting port %d\n", priv->port);
	}
	}
+2 −0
Original line number Original line Diff line number Diff line
@@ -294,6 +294,8 @@ int mlx4_en_free_tx_buf(struct net_device *dev, struct mlx4_en_tx_ring *ring)
		cnt++;
		cnt++;
	}
	}


	netdev_tx_reset_queue(ring->tx_queue);

	if (cnt)
	if (cnt)
		en_dbg(DRV, priv, "Freed %d uncompleted tx descriptors\n", cnt);
		en_dbg(DRV, priv, "Freed %d uncompleted tx descriptors\n", cnt);