ethernet: ionic: Fix DMA mapping tests
[ 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:0f3154e6bc("ionic: Add Tx and Rx handling") Fixes:56e41ee12d("ionic: better dma-map error handling") Fixes:ac8813c0ab("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>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
5b7d9b26a1
commit
715f6dbe9b
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user