| From foo@baz Wed 27 May 2020 07:13:24 PM CEST |
| From: Moshe Shemesh <moshe@mellanox.com> |
| Date: Tue, 7 Apr 2020 17:38:28 +0300 |
| Subject: net/mlx5e: Update netdev txq on completions during closure |
| |
| From: Moshe Shemesh <moshe@mellanox.com> |
| |
| [ Upstream commit 5e911e2c06bd8c17df29147a5e2d4b17fafda024 ] |
| |
| On sq closure when we free its descriptors, we should also update netdev |
| txq on completions which would not arrive. Otherwise if we reopen sqs |
| and attach them back, for example on fw fatal recovery flow, we may get |
| tx timeout. |
| |
| Fixes: 29429f3300a3 ("net/mlx5e: Timeout if SQ doesn't flush during close") |
| Signed-off-by: Moshe Shemesh <moshe@mellanox.com> |
| Reviewed-by: Tariq Toukan <tariqt@mellanox.com> |
| Signed-off-by: Saeed Mahameed <saeedm@mellanox.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| drivers/net/ethernet/mellanox/mlx5/core/en_tx.c | 9 ++++++--- |
| 1 file changed, 6 insertions(+), 3 deletions(-) |
| |
| --- a/drivers/net/ethernet/mellanox/mlx5/core/en_tx.c |
| +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_tx.c |
| @@ -538,10 +538,9 @@ bool mlx5e_poll_tx_cq(struct mlx5e_cq *c |
| void mlx5e_free_txqsq_descs(struct mlx5e_txqsq *sq) |
| { |
| struct mlx5e_tx_wqe_info *wi; |
| + u32 dma_fifo_cc, nbytes = 0; |
| + u16 ci, sqcc, npkts = 0; |
| struct sk_buff *skb; |
| - u32 dma_fifo_cc; |
| - u16 sqcc; |
| - u16 ci; |
| int i; |
| |
| sqcc = sq->cc; |
| @@ -566,11 +565,15 @@ void mlx5e_free_txqsq_descs(struct mlx5e |
| } |
| |
| dev_kfree_skb_any(skb); |
| + npkts++; |
| + nbytes += wi->num_bytes; |
| sqcc += wi->num_wqebbs; |
| } |
| |
| sq->dma_fifo_cc = dma_fifo_cc; |
| sq->cc = sqcc; |
| + |
| + netdev_tx_completed_queue(sq->txq, npkts, nbytes); |
| } |
| |
| #ifdef CONFIG_MLX5_CORE_IPOIB |