mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-04 18:19:28 +09:00
net/mlx5e: TX, Use correct counter in dma_map error flow
[ Upstream commitd9a96ec362] In case of a dma_mapping_error, do not use wi->num_dma as a parameter for dma unmap function because it's yet to be set, and holds an out-of-date value. Use actual value (local variable num_dma) instead. Fixes:34802a42b3("net/mlx5e: Do not modify the TX SKB") Fixes:e586b3b0ba("net/mlx5: Ethernet Datapath files") Signed-off-by: Tariq Toukan <tariqt@mellanox.com> Signed-off-by: Saeed Mahameed <saeedm@mellanox.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
b047794cc3
commit
eac1ab609b
@@ -234,7 +234,7 @@ mlx5e_txwqe_build_dsegs(struct mlx5e_txqsq *sq, struct sk_buff *skb,
|
||||
dma_addr = dma_map_single(sq->pdev, skb_data, headlen,
|
||||
DMA_TO_DEVICE);
|
||||
if (unlikely(dma_mapping_error(sq->pdev, dma_addr)))
|
||||
return -ENOMEM;
|
||||
goto dma_unmap_wqe_err;
|
||||
|
||||
dseg->addr = cpu_to_be64(dma_addr);
|
||||
dseg->lkey = sq->mkey_be;
|
||||
@@ -252,7 +252,7 @@ mlx5e_txwqe_build_dsegs(struct mlx5e_txqsq *sq, struct sk_buff *skb,
|
||||
dma_addr = skb_frag_dma_map(sq->pdev, frag, 0, fsz,
|
||||
DMA_TO_DEVICE);
|
||||
if (unlikely(dma_mapping_error(sq->pdev, dma_addr)))
|
||||
return -ENOMEM;
|
||||
goto dma_unmap_wqe_err;
|
||||
|
||||
dseg->addr = cpu_to_be64(dma_addr);
|
||||
dseg->lkey = sq->mkey_be;
|
||||
@@ -264,6 +264,10 @@ mlx5e_txwqe_build_dsegs(struct mlx5e_txqsq *sq, struct sk_buff *skb,
|
||||
}
|
||||
|
||||
return num_dma;
|
||||
|
||||
dma_unmap_wqe_err:
|
||||
mlx5e_dma_unmap_wqe_err(sq, num_dma);
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
static inline void
|
||||
@@ -355,17 +359,15 @@ static netdev_tx_t mlx5e_sq_xmit(struct mlx5e_txqsq *sq, struct sk_buff *skb,
|
||||
num_dma = mlx5e_txwqe_build_dsegs(sq, skb, skb_data, headlen,
|
||||
(struct mlx5_wqe_data_seg *)cseg + ds_cnt);
|
||||
if (unlikely(num_dma < 0))
|
||||
goto dma_unmap_wqe_err;
|
||||
goto err_drop;
|
||||
|
||||
mlx5e_txwqe_complete(sq, skb, opcode, ds_cnt + num_dma,
|
||||
num_bytes, num_dma, wi, cseg);
|
||||
|
||||
return NETDEV_TX_OK;
|
||||
|
||||
dma_unmap_wqe_err:
|
||||
err_drop:
|
||||
sq->stats.dropped++;
|
||||
mlx5e_dma_unmap_wqe_err(sq, wi->num_dma);
|
||||
|
||||
dev_kfree_skb_any(skb);
|
||||
|
||||
return NETDEV_TX_OK;
|
||||
@@ -594,17 +596,15 @@ netdev_tx_t mlx5i_sq_xmit(struct mlx5e_txqsq *sq, struct sk_buff *skb,
|
||||
num_dma = mlx5e_txwqe_build_dsegs(sq, skb, skb_data, headlen,
|
||||
(struct mlx5_wqe_data_seg *)cseg + ds_cnt);
|
||||
if (unlikely(num_dma < 0))
|
||||
goto dma_unmap_wqe_err;
|
||||
goto err_drop;
|
||||
|
||||
mlx5e_txwqe_complete(sq, skb, opcode, ds_cnt + num_dma,
|
||||
num_bytes, num_dma, wi, cseg);
|
||||
|
||||
return NETDEV_TX_OK;
|
||||
|
||||
dma_unmap_wqe_err:
|
||||
err_drop:
|
||||
sq->stats.dropped++;
|
||||
mlx5e_dma_unmap_wqe_err(sq, wi->num_dma);
|
||||
|
||||
dev_kfree_skb_any(skb);
|
||||
|
||||
return NETDEV_TX_OK;
|
||||
|
||||
Reference in New Issue
Block a user