Re: [PATCH -fixes] dma-mapping: add default implementation to arch_dma_{set|clear}_uncached

From: Robin Murphy
Date: Tue Jul 09 2024 - 07:54:10 EST


On 09/07/2024 12:39 pm, Yangyu Chen wrote:


On Jul 9, 2024, at 19:19, Christoph Hellwig <hch@xxxxxx> wrote:

On Tue, Jul 09, 2024 at 05:25:29PM +0800, Yangyu Chen wrote:
Currently, we have some code in kernel/dma/direct.c which references
arch_dma_set_uncached and arch_dma_clear_uncached. However, many
architectures do not provide these symbols, and the code currently
relies on compiler optimization to cut the unnecessary code. When the
compiler fails to optimize it, the code will reference the symbol and
cause a link error. I found this bug when developing some new extensions
for RISC-V on LLVM. The error message is shown below:

Same comment as for the last one. I think your compiler misbehaves,
and the typical reason for that would be if you disable all
optimizations.


The reason is that some optimizations failed to apply after adding
some passes. I will fix the compiler later. Whatever, we should not
rely on this optimization to get the code being successfully compiled.

We rely on unreachable code being optimised out *all over* the place - it's kind of the main point of constructs like IS_ENABLED(), and why the kernel as a whole does not and will not support being compiled with -O0. Frankly I'm quite surprised that this one would be the only case you hit if your compiler is not doing that properly.

Thanks,
Robin.