Skip to content

Commit eac1ab6

Browse files
Tariq Toukangregkh
authored andcommitted
net/mlx5e: TX, Use correct counter in dma_map error flow
[ Upstream commit d9a96ec ] 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: 34802a4 ("net/mlx5e: Do not modify the TX SKB") Fixes: e586b3b ("net/mlx5: Ethernet Datapath files") Signed-off-by: Tariq Toukan <[email protected]> Signed-off-by: Saeed Mahameed <[email protected]> Signed-off-by: Greg Kroah-Hartman <[email protected]>
1 parent b047794 commit eac1ab6

File tree

1 file changed

+10
-10
lines changed
  • drivers/net/ethernet/mellanox/mlx5/core

1 file changed

+10
-10
lines changed

drivers/net/ethernet/mellanox/mlx5/core/en_tx.c

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -234,7 +234,7 @@ mlx5e_txwqe_build_dsegs(struct mlx5e_txqsq *sq, struct sk_buff *skb,
234234
dma_addr = dma_map_single(sq->pdev, skb_data, headlen,
235235
DMA_TO_DEVICE);
236236
if (unlikely(dma_mapping_error(sq->pdev, dma_addr)))
237-
return -ENOMEM;
237+
goto dma_unmap_wqe_err;
238238

239239
dseg->addr = cpu_to_be64(dma_addr);
240240
dseg->lkey = sq->mkey_be;
@@ -252,7 +252,7 @@ mlx5e_txwqe_build_dsegs(struct mlx5e_txqsq *sq, struct sk_buff *skb,
252252
dma_addr = skb_frag_dma_map(sq->pdev, frag, 0, fsz,
253253
DMA_TO_DEVICE);
254254
if (unlikely(dma_mapping_error(sq->pdev, dma_addr)))
255-
return -ENOMEM;
255+
goto dma_unmap_wqe_err;
256256

257257
dseg->addr = cpu_to_be64(dma_addr);
258258
dseg->lkey = sq->mkey_be;
@@ -264,6 +264,10 @@ mlx5e_txwqe_build_dsegs(struct mlx5e_txqsq *sq, struct sk_buff *skb,
264264
}
265265

266266
return num_dma;
267+
268+
dma_unmap_wqe_err:
269+
mlx5e_dma_unmap_wqe_err(sq, num_dma);
270+
return -ENOMEM;
267271
}
268272

269273
static inline void
@@ -355,17 +359,15 @@ static netdev_tx_t mlx5e_sq_xmit(struct mlx5e_txqsq *sq, struct sk_buff *skb,
355359
num_dma = mlx5e_txwqe_build_dsegs(sq, skb, skb_data, headlen,
356360
(struct mlx5_wqe_data_seg *)cseg + ds_cnt);
357361
if (unlikely(num_dma < 0))
358-
goto dma_unmap_wqe_err;
362+
goto err_drop;
359363

360364
mlx5e_txwqe_complete(sq, skb, opcode, ds_cnt + num_dma,
361365
num_bytes, num_dma, wi, cseg);
362366

363367
return NETDEV_TX_OK;
364368

365-
dma_unmap_wqe_err:
369+
err_drop:
366370
sq->stats.dropped++;
367-
mlx5e_dma_unmap_wqe_err(sq, wi->num_dma);
368-
369371
dev_kfree_skb_any(skb);
370372

371373
return NETDEV_TX_OK;
@@ -594,17 +596,15 @@ netdev_tx_t mlx5i_sq_xmit(struct mlx5e_txqsq *sq, struct sk_buff *skb,
594596
num_dma = mlx5e_txwqe_build_dsegs(sq, skb, skb_data, headlen,
595597
(struct mlx5_wqe_data_seg *)cseg + ds_cnt);
596598
if (unlikely(num_dma < 0))
597-
goto dma_unmap_wqe_err;
599+
goto err_drop;
598600

599601
mlx5e_txwqe_complete(sq, skb, opcode, ds_cnt + num_dma,
600602
num_bytes, num_dma, wi, cseg);
601603

602604
return NETDEV_TX_OK;
603605

604-
dma_unmap_wqe_err:
606+
err_drop:
605607
sq->stats.dropped++;
606-
mlx5e_dma_unmap_wqe_err(sq, wi->num_dma);
607-
608608
dev_kfree_skb_any(skb);
609609

610610
return NETDEV_TX_OK;

0 commit comments

Comments
 (0)