|
Jiri Slaby |
d71717 |
From: Tariq Toukan <tariqt@mellanox.com>
|
|
Jiri Slaby |
d71717 |
Date: Tue, 20 Mar 2018 18:17:25 +0200
|
|
Jiri Slaby |
d71717 |
Subject: net/mlx5e: TX, Use correct counter in dma_map error flow
|
|
Jiri Slaby |
d71717 |
Git-commit: d9a96ec362e3da878c378854e25321c85bac52c2
|
|
Jiri Slaby |
d71717 |
Patch-mainline: v4.17-rc4
|
|
Jiri Slaby |
d71717 |
References: networking-stable-18_05_15
|
|
Jiri Slaby |
d71717 |
|
|
Jiri Slaby |
d71717 |
In case of a dma_mapping_error, do not use wi->num_dma
|
|
Jiri Slaby |
d71717 |
as a parameter for dma unmap function because it's yet
|
|
Jiri Slaby |
d71717 |
to be set, and holds an out-of-date value.
|
|
Jiri Slaby |
d71717 |
Use actual value (local variable num_dma) instead.
|
|
Jiri Slaby |
d71717 |
|
|
Jiri Slaby |
d71717 |
Fixes: 34802a42b352 ("net/mlx5e: Do not modify the TX SKB")
|
|
Jiri Slaby |
d71717 |
Fixes: e586b3b0baee ("net/mlx5: Ethernet Datapath files")
|
|
Jiri Slaby |
d71717 |
Signed-off-by: Tariq Toukan <tariqt@mellanox.com>
|
|
Jiri Slaby |
d71717 |
Signed-off-by: Saeed Mahameed <saeedm@mellanox.com>
|
|
Jiri Slaby |
d71717 |
Signed-off-by: Jiri Slaby <jslaby@suse.cz>
|
|
Jiri Slaby |
d71717 |
---
|
|
Jiri Slaby |
d71717 |
.../net/ethernet/mellanox/mlx5/core/en_tx.c | 20 +++++++++----------
|
|
Jiri Slaby |
d71717 |
1 file changed, 10 insertions(+), 10 deletions(-)
|
|
Jiri Slaby |
d71717 |
|
|
Jiri Slaby |
d71717 |
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_tx.c b/drivers/net/ethernet/mellanox/mlx5/core/en_tx.c
|
|
Jiri Slaby |
d71717 |
index 20297108528a..5532aa3675c7 100644
|
|
Jiri Slaby |
d71717 |
--- a/drivers/net/ethernet/mellanox/mlx5/core/en_tx.c
|
|
Jiri Slaby |
d71717 |
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en_tx.c
|
|
Jiri Slaby |
d71717 |
@@ -255,7 +255,7 @@ mlx5e_txwqe_build_dsegs(struct mlx5e_txqsq *sq, struct sk_buff *skb,
|
|
Jiri Slaby |
d71717 |
dma_addr = dma_map_single(sq->pdev, skb_data, headlen,
|
|
Jiri Slaby |
d71717 |
DMA_TO_DEVICE);
|
|
Jiri Slaby |
d71717 |
if (unlikely(dma_mapping_error(sq->pdev, dma_addr)))
|
|
Jiri Slaby |
d71717 |
- return -ENOMEM;
|
|
Jiri Slaby |
d71717 |
+ goto dma_unmap_wqe_err;
|
|
Jiri Slaby |
d71717 |
|
|
Jiri Slaby |
d71717 |
dseg->addr = cpu_to_be64(dma_addr);
|
|
Jiri Slaby |
d71717 |
dseg->lkey = sq->mkey_be;
|
|
Jiri Slaby |
d71717 |
@@ -273,7 +273,7 @@ mlx5e_txwqe_build_dsegs(struct mlx5e_txqsq *sq, struct sk_buff *skb,
|
|
Jiri Slaby |
d71717 |
dma_addr = skb_frag_dma_map(sq->pdev, frag, 0, fsz,
|
|
Jiri Slaby |
d71717 |
DMA_TO_DEVICE);
|
|
Jiri Slaby |
d71717 |
if (unlikely(dma_mapping_error(sq->pdev, dma_addr)))
|
|
Jiri Slaby |
d71717 |
- return -ENOMEM;
|
|
Jiri Slaby |
d71717 |
+ goto dma_unmap_wqe_err;
|
|
Jiri Slaby |
d71717 |
|
|
Jiri Slaby |
d71717 |
dseg->addr = cpu_to_be64(dma_addr);
|
|
Jiri Slaby |
d71717 |
dseg->lkey = sq->mkey_be;
|
|
Jiri Slaby |
d71717 |
@@ -285,6 +285,10 @@ mlx5e_txwqe_build_dsegs(struct mlx5e_txqsq *sq, struct sk_buff *skb,
|
|
Jiri Slaby |
d71717 |
}
|
|
Jiri Slaby |
d71717 |
|
|
Jiri Slaby |
d71717 |
return num_dma;
|
|
Jiri Slaby |
d71717 |
+
|
|
Jiri Slaby |
d71717 |
+dma_unmap_wqe_err:
|
|
Jiri Slaby |
d71717 |
+ mlx5e_dma_unmap_wqe_err(sq, num_dma);
|
|
Jiri Slaby |
d71717 |
+ return -ENOMEM;
|
|
Jiri Slaby |
d71717 |
}
|
|
Jiri Slaby |
d71717 |
|
|
Jiri Slaby |
d71717 |
static inline void
|
|
Jiri Slaby |
d71717 |
@@ -380,17 +384,15 @@ static netdev_tx_t mlx5e_sq_xmit(struct mlx5e_txqsq *sq, struct sk_buff *skb,
|
|
Jiri Slaby |
d71717 |
num_dma = mlx5e_txwqe_build_dsegs(sq, skb, skb_data, headlen,
|
|
Jiri Slaby |
d71717 |
(struct mlx5_wqe_data_seg *)cseg + ds_cnt);
|
|
Jiri Slaby |
d71717 |
if (unlikely(num_dma < 0))
|
|
Jiri Slaby |
d71717 |
- goto dma_unmap_wqe_err;
|
|
Jiri Slaby |
d71717 |
+ goto err_drop;
|
|
Jiri Slaby |
d71717 |
|
|
Jiri Slaby |
d71717 |
mlx5e_txwqe_complete(sq, skb, opcode, ds_cnt + num_dma,
|
|
Jiri Slaby |
d71717 |
num_bytes, num_dma, wi, cseg);
|
|
Jiri Slaby |
d71717 |
|
|
Jiri Slaby |
d71717 |
return NETDEV_TX_OK;
|
|
Jiri Slaby |
d71717 |
|
|
Jiri Slaby |
d71717 |
-dma_unmap_wqe_err:
|
|
Jiri Slaby |
d71717 |
+err_drop:
|
|
Jiri Slaby |
d71717 |
sq->stats.dropped++;
|
|
Jiri Slaby |
d71717 |
- mlx5e_dma_unmap_wqe_err(sq, wi->num_dma);
|
|
Jiri Slaby |
d71717 |
-
|
|
Jiri Slaby |
d71717 |
dev_kfree_skb_any(skb);
|
|
Jiri Slaby |
d71717 |
|
|
Jiri Slaby |
d71717 |
return NETDEV_TX_OK;
|
|
Jiri Slaby |
d71717 |
@@ -645,17 +647,15 @@ netdev_tx_t mlx5i_sq_xmit(struct mlx5e_txqsq *sq, struct sk_buff *skb,
|
|
Jiri Slaby |
d71717 |
num_dma = mlx5e_txwqe_build_dsegs(sq, skb, skb_data, headlen,
|
|
Jiri Slaby |
d71717 |
(struct mlx5_wqe_data_seg *)cseg + ds_cnt);
|
|
Jiri Slaby |
d71717 |
if (unlikely(num_dma < 0))
|
|
Jiri Slaby |
d71717 |
- goto dma_unmap_wqe_err;
|
|
Jiri Slaby |
d71717 |
+ goto err_drop;
|
|
Jiri Slaby |
d71717 |
|
|
Jiri Slaby |
d71717 |
mlx5e_txwqe_complete(sq, skb, opcode, ds_cnt + num_dma,
|
|
Jiri Slaby |
d71717 |
num_bytes, num_dma, wi, cseg);
|
|
Jiri Slaby |
d71717 |
|
|
Jiri Slaby |
d71717 |
return NETDEV_TX_OK;
|
|
Jiri Slaby |
d71717 |
|
|
Jiri Slaby |
d71717 |
-dma_unmap_wqe_err:
|
|
Jiri Slaby |
d71717 |
+err_drop:
|
|
Jiri Slaby |
d71717 |
sq->stats.dropped++;
|
|
Jiri Slaby |
d71717 |
- mlx5e_dma_unmap_wqe_err(sq, wi->num_dma);
|
|
Jiri Slaby |
d71717 |
-
|
|
Jiri Slaby |
d71717 |
dev_kfree_skb_any(skb);
|
|
Jiri Slaby |
d71717 |
|
|
Jiri Slaby |
d71717 |
return NETDEV_TX_OK;
|
|
Jiri Slaby |
d71717 |
--
|
|
Jiri Slaby |
d71717 |
2.18.0
|
|
Jiri Slaby |
d71717 |
|