Commit d5e3241c authored by Thomas Fourier's avatar Thomas Fourier Committed by Jakub Kicinski
Browse files

ethernet: ionic: Fix DMA mapping tests



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: 0f3154e6 ("ionic: Add Tx and Rx handling")
Fixes: 56e41ee1 ("ionic: better dma-map error handling")
Fixes: ac8813c0 ("ionic: convert Rx queue buffers to use page_pool")
Signed-off-by: default avatarThomas Fourier <fourier.thomas@gmail.com>
Reviewed-by: default avatarBrett Creeley <brett.creeley@amd.com>
Link: https://patch.msgid.link/20250619094538.283723-2-fourier.thomas@gmail.com


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent f5990207
Loading
Loading
Loading
Loading
+6 −6
Original line number Diff line number Diff line
@@ -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);