Thread (5 messages) flat view 5 messages, 4 authors, 2024-01-12

Re: [PATCH] net: ethernet: ravb: fix dma mapping failure handling

From: Nikita Yushchenko <nikita.yoush@cogentembedded.com>
Date: 2024-01-12 09:04:23
Also in: linux-renesas-soc, lkml


12.01.2024 14:56, Denis Kirjanov wrote:

On 1/12/24 08:06, Nikita Yushchenko wrote:
quoted
dma_mapping_error() depends on getting full 64-bit dma_addr_t and does
not work correctly if 32-bit value is passed instead.

Fix handling of dma_map_single() failures on Rx ring entries:
- do not store return value of dma_map_signle() in 32-bit variable,
- do not use dma_mapping_error() against 32-bit descriptor field when
   checking if unmap is needed, check for zero size instead.
Hmm, something is wrong here since you're mixing DMA api and forced 32bit values.
if dma uses 32bit addresses then dma_addr_t need only be 32 bits wide
dma_addr_t is arch-wide type and it is 64bit on arm64

Still, some devices use 32-bit dma addresses.
Proper setting of dma masks and/of configuring iommu ensures that in no error case, dma address fits 
into 32 bits.
Still, in error case dma_map_single() returns ~((dma_addr_t)0) which uses fill dma_addr_t width and gets 
corrupted if assigned to 32-bit value, then later call to dma_mapping_error() does not recognize it. The 
patch fixes exactly this issue.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help