Thread (20 messages) flat view 20 messages, 5 authors, 2022-11-30

Re: [PATCH 7/9] Input: n64joy - Fix DMA buffer alignment.

From: Jonathan Cameron <jic23@kernel.org>
Date: 2022-11-27 17:48:51

On Sun, 27 Nov 2022 18:48:44 +0200
Lauri Kasanen [off-list ref] wrote:
On Sun, 27 Nov 2022 14:41:14 +0000
Jonathan Cameron [off-list ref] wrote:
quoted
From: Jonathan Cameron <Jonathan.Cameron@huawei.com>

The use of ____cacheline_aligned to ensure a buffer is DMA safe only
enforces the start of the buffer alignment. In this case, sufficient
alignment is already ensured by the use of kzalloc().
____cacheline_aligned does not ensure that no other members of the
structure are placed in the same cacheline after the end of the
buffer marked.  Thus to ensure a DMA safe buffer it must be at the end
of the structure.  
This move is unnecessary, because the cacheline is 16 bytes and the
buffer is 64 bytes.
Ah.  That particular option hadn't occurred to me (and I'd failed to notice
how big the buffer is :( ).
The marking isn't needed at all then as the allocation is already
guaranteed to be sufficiently aligned. However, maybe that is a bit subtle
and having some sort of marking is useful.

Curious question though, why is the buffer so big?
Each struct joydata is 8 bytes I think, but the driver only accesses 4 of them.

Is the hardware putting garbage into the remaining 2 cachelines or is there
something subtle going on?

Or given my earlier success, maybe I'm misreading the code entirely.

Jonathan
quoted
Whilst here switch from ____cacheline_aligned to
__aligned(ARCH_KMALLOC_MINALIGN) as on some architectures, with variable
sized cacheline lines across their cache hierarchy, require this
greater alignment guarantee for DMA safety.  Make this change throughout
the driver as it reduces need for a reader to know about the particular
architecture.  
This change looks ok.

- Lauri
  
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help