diff options
Diffstat (limited to 'queue-6.12/ethernet-ionic-fix-dma-mapping-tests.patch')
-rw-r--r-- | queue-6.12/ethernet-ionic-fix-dma-mapping-tests.patch | 89 |
1 files changed, 89 insertions, 0 deletions
diff --git a/queue-6.12/ethernet-ionic-fix-dma-mapping-tests.patch b/queue-6.12/ethernet-ionic-fix-dma-mapping-tests.patch new file mode 100644 index 0000000000..2503c376be --- /dev/null +++ b/queue-6.12/ethernet-ionic-fix-dma-mapping-tests.patch @@ -0,0 +1,89 @@ +From 2c0b1d200adb3b455d79afb2d5fa2022a985cb18 Mon Sep 17 00:00:00 2001 +From: Sasha Levin <sashal@kernel.org> +Date: Thu, 19 Jun 2025 11:45:30 +0200 +Subject: ethernet: ionic: Fix DMA mapping tests + +From: Thomas Fourier <fourier.thomas@gmail.com> + +[ Upstream commit d5e3241c5a386a2425823c8c7afb77a465bd040f ] + +Change error values of `ionic_tx_map_single()` and `ionic_tx_map_frag()` +from 0 to `DMA_MAPPING_ERROR` to prevent collision with 0 as a valid +address. + +This also fixes the use of `dma_mapping_error()` to test against 0 in +`ionic_xdp_post_frame()` + +Fixes: 0f3154e6bcb3 ("ionic: Add Tx and Rx handling") +Fixes: 56e41ee12d2d ("ionic: better dma-map error handling") +Fixes: ac8813c0ab7d ("ionic: convert Rx queue buffers to use page_pool") +Signed-off-by: Thomas Fourier <fourier.thomas@gmail.com> +Reviewed-by: Brett Creeley <brett.creeley@amd.com> +Link: https://patch.msgid.link/20250619094538.283723-2-fourier.thomas@gmail.com +Signed-off-by: Jakub Kicinski <kuba@kernel.org> +Signed-off-by: Sasha Levin <sashal@kernel.org> +--- + drivers/net/ethernet/pensando/ionic/ionic_txrx.c | 12 ++++++------ + 1 file changed, 6 insertions(+), 6 deletions(-) + +diff --git a/drivers/net/ethernet/pensando/ionic/ionic_txrx.c b/drivers/net/ethernet/pensando/ionic/ionic_txrx.c +index 0eeda7e502db2..0f5758c273c22 100644 +--- a/drivers/net/ethernet/pensando/ionic/ionic_txrx.c ++++ b/drivers/net/ethernet/pensando/ionic/ionic_txrx.c +@@ -321,7 +321,7 @@ static int ionic_xdp_post_frame(struct ionic_queue *q, struct xdp_frame *frame, + len, DMA_TO_DEVICE); + } else /* XDP_REDIRECT */ { + dma_addr = ionic_tx_map_single(q, frame->data, len); +- if (!dma_addr) ++ if (dma_addr == DMA_MAPPING_ERROR) + return -EIO; + } + +@@ -357,7 +357,7 @@ static int ionic_xdp_post_frame(struct ionic_queue *q, struct xdp_frame *frame, + } else { + dma_addr = ionic_tx_map_frag(q, frag, 0, + skb_frag_size(frag)); +- if (dma_mapping_error(q->dev, dma_addr)) { ++ if (dma_addr == DMA_MAPPING_ERROR) { + ionic_tx_desc_unmap_bufs(q, desc_info); + return -EIO; + } +@@ -1083,7 +1083,7 @@ static dma_addr_t ionic_tx_map_single(struct ionic_queue *q, + net_warn_ratelimited("%s: DMA single map failed on %s!\n", + dev_name(dev), q->name); + q_to_tx_stats(q)->dma_map_err++; +- return 0; ++ return DMA_MAPPING_ERROR; + } + return dma_addr; + } +@@ -1100,7 +1100,7 @@ static dma_addr_t ionic_tx_map_frag(struct ionic_queue *q, + net_warn_ratelimited("%s: DMA frag map failed on %s!\n", + dev_name(dev), q->name); + q_to_tx_stats(q)->dma_map_err++; +- return 0; ++ return DMA_MAPPING_ERROR; + } + return dma_addr; + } +@@ -1116,7 +1116,7 @@ static int ionic_tx_map_skb(struct ionic_queue *q, struct sk_buff *skb, + int frag_idx; + + dma_addr = ionic_tx_map_single(q, skb->data, skb_headlen(skb)); +- if (!dma_addr) ++ if (dma_addr == DMA_MAPPING_ERROR) + return -EIO; + buf_info->dma_addr = dma_addr; + buf_info->len = skb_headlen(skb); +@@ -1126,7 +1126,7 @@ static int ionic_tx_map_skb(struct ionic_queue *q, struct sk_buff *skb, + nfrags = skb_shinfo(skb)->nr_frags; + for (frag_idx = 0; frag_idx < nfrags; frag_idx++, frag++) { + dma_addr = ionic_tx_map_frag(q, frag, 0, skb_frag_size(frag)); +- if (!dma_addr) ++ if (dma_addr == DMA_MAPPING_ERROR) + goto dma_fail; + buf_info->dma_addr = dma_addr; + buf_info->len = skb_frag_size(frag); +-- +2.39.5 + |