mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-08-31 10:31:33 -04:00
net: stmmac: convert DMA address to lower 32 before assignment
In jumbo_frm() (implemented in both "chain_mode.c" and "ring_mode.c"), there are places where a DMA descriptor is converted to little-endian byte order in assignment. The DMA descriptor could be a 64-bit value, which makes the 32-bit byte swapping operation seem a little sketchy. Explicitly extract the low-order 32 bits of the dma_addr_t value being converted into a u32 so it's crystal clear that we're doing the right thing. Suggested-by: Maxime Chevallier <maxime.chevallier@bootlin.com> Signed-off-by: Alex Elder <elder@riscstar.com> Link: https://patch.msgid.link/20260812163832.271742-3-elder@riscstar.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
committed by
Jakub Kicinski
parent
0c1f9020d2
commit
c11c497af8
@@ -37,7 +37,7 @@ static int jumbo_frm(struct stmmac_tx_queue *tx_q, struct sk_buff *skb,
|
||||
|
||||
des2 = dma_map_single(priv->device, skb->data,
|
||||
buf_len, DMA_TO_DEVICE);
|
||||
desc->des2 = cpu_to_le32(des2);
|
||||
desc->des2 = cpu_to_le32(lower_32_bits(des2));
|
||||
if (dma_mapping_error(priv->device, des2))
|
||||
return -1;
|
||||
tx_q->tx_skbuff_dma[entry].buf = des2;
|
||||
@@ -55,7 +55,7 @@ static int jumbo_frm(struct stmmac_tx_queue *tx_q, struct sk_buff *skb,
|
||||
des2 = dma_map_single(priv->device,
|
||||
(skb->data + bmax * i),
|
||||
bmax, DMA_TO_DEVICE);
|
||||
desc->des2 = cpu_to_le32(des2);
|
||||
desc->des2 = cpu_to_le32(lower_32_bits(des2));
|
||||
if (dma_mapping_error(priv->device, des2))
|
||||
return -1;
|
||||
tx_q->tx_skbuff_dma[entry].buf = des2;
|
||||
@@ -68,7 +68,7 @@ static int jumbo_frm(struct stmmac_tx_queue *tx_q, struct sk_buff *skb,
|
||||
des2 = dma_map_single(priv->device,
|
||||
(skb->data + bmax * i), len,
|
||||
DMA_TO_DEVICE);
|
||||
desc->des2 = cpu_to_le32(des2);
|
||||
desc->des2 = cpu_to_le32(lower_32_bits(des2));
|
||||
if (dma_mapping_error(priv->device, des2))
|
||||
return -1;
|
||||
tx_q->tx_skbuff_dma[entry].buf = des2;
|
||||
|
||||
@@ -40,7 +40,7 @@ static int jumbo_frm(struct stmmac_tx_queue *tx_q, struct sk_buff *skb,
|
||||
|
||||
des2 = dma_map_single(priv->device, skb->data, bmax,
|
||||
DMA_TO_DEVICE);
|
||||
desc->des2 = cpu_to_le32(des2);
|
||||
desc->des2 = cpu_to_le32(lower_32_bits(des2));
|
||||
if (dma_mapping_error(priv->device, des2))
|
||||
return -1;
|
||||
|
||||
@@ -48,7 +48,7 @@ static int jumbo_frm(struct stmmac_tx_queue *tx_q, struct sk_buff *skb,
|
||||
tx_q->tx_skbuff_dma[entry].len = bmax;
|
||||
tx_q->tx_skbuff_dma[entry].is_jumbo = true;
|
||||
|
||||
desc->des3 = cpu_to_le32(des2 + BUF_SIZE_4KiB);
|
||||
desc->des3 = cpu_to_le32(lower_32_bits(des2) + BUF_SIZE_4KiB);
|
||||
stmmac_prepare_tx_desc(priv, desc, 1, bmax, csum,
|
||||
STMMAC_RING_MODE, 0, false, skb->len);
|
||||
tx_q->tx_skbuff[entry] = NULL;
|
||||
@@ -61,27 +61,27 @@ static int jumbo_frm(struct stmmac_tx_queue *tx_q, struct sk_buff *skb,
|
||||
|
||||
des2 = dma_map_single(priv->device, skb->data + bmax, len,
|
||||
DMA_TO_DEVICE);
|
||||
desc->des2 = cpu_to_le32(des2);
|
||||
desc->des2 = cpu_to_le32(lower_32_bits(des2));
|
||||
if (dma_mapping_error(priv->device, des2))
|
||||
return -1;
|
||||
tx_q->tx_skbuff_dma[entry].buf = des2;
|
||||
tx_q->tx_skbuff_dma[entry].len = len;
|
||||
tx_q->tx_skbuff_dma[entry].is_jumbo = true;
|
||||
|
||||
desc->des3 = cpu_to_le32(des2 + BUF_SIZE_4KiB);
|
||||
desc->des3 = cpu_to_le32(lower_32_bits(des2) + BUF_SIZE_4KiB);
|
||||
stmmac_prepare_tx_desc(priv, desc, 0, len, csum,
|
||||
STMMAC_RING_MODE, 1, !skb_is_nonlinear(skb),
|
||||
skb->len);
|
||||
} else {
|
||||
des2 = dma_map_single(priv->device, skb->data,
|
||||
nopaged_len, DMA_TO_DEVICE);
|
||||
desc->des2 = cpu_to_le32(des2);
|
||||
desc->des2 = cpu_to_le32(lower_32_bits(des2));
|
||||
if (dma_mapping_error(priv->device, des2))
|
||||
return -1;
|
||||
tx_q->tx_skbuff_dma[entry].buf = des2;
|
||||
tx_q->tx_skbuff_dma[entry].len = nopaged_len;
|
||||
tx_q->tx_skbuff_dma[entry].is_jumbo = true;
|
||||
desc->des3 = cpu_to_le32(des2 + BUF_SIZE_4KiB);
|
||||
desc->des3 = cpu_to_le32(lower_32_bits(des2) + BUF_SIZE_4KiB);
|
||||
stmmac_prepare_tx_desc(priv, desc, 1, nopaged_len, csum,
|
||||
STMMAC_RING_MODE, 0, !skb_is_nonlinear(skb),
|
||||
skb->len);
|
||||
|
||||
Reference in New Issue
Block a user