Messages in this thread Patch in this message | | | Subject | Re: [PATCH] compiler.h: Fix barrier_data() on clang | From | Randy Dunlap <> | Date | Mon, 16 Nov 2020 09:53:46 -0800 |
| |
On 11/16/20 9:47 AM, Andreas Schwab wrote: > On Okt 14 2020, Arvind Sankar wrote: > >> Commit >> 815f0ddb346c ("include/linux/compiler*.h: make compiler-*.h mutually exclusive") >> >> neglected to copy barrier_data() from compiler-gcc.h into >> compiler-clang.h. The definition in compiler-gcc.h was really to work >> around clang's more aggressive optimization, so this broke >> barrier_data() on clang, and consequently memzero_explicit() as well. >> >> For example, this results in at least the memzero_explicit() call in >> lib/crypto/sha256.c:sha256_transform() being optimized away by clang. >> >> Fix this by moving the definition of barrier_data() into compiler.h. >> >> Also move the gcc/clang definition of barrier() into compiler.h, >> __memory_barrier() is icc-specific (and barrier() is already defined >> using it in compiler-intel.h) and doesn't belong in compiler.h. >> >> Signed-off-by: Arvind Sankar <nivedita@alum.mit.edu> >> Fixes: 815f0ddb346c ("include/linux/compiler*.h: make compiler-*.h mutually exclusive") > > This breaks build on riscv: > > CC [M] drivers/net/ethernet/emulex/benet/be_main.o > In file included from ./include/vdso/processor.h:10, > from ./arch/riscv/include/asm/processor.h:11, > from ./include/linux/prefetch.h:15, > from drivers/net/ethernet/emulex/benet/be_main.c:14: > ./arch/riscv/include/asm/vdso/processor.h: In function 'cpu_relax': > ./arch/riscv/include/asm/vdso/processor.h:14:2: error: implicit declaration of function 'barrier' [-Werror=implicit-function-declaration] > 14 | barrier(); > | ^~~~~~~ > cc1: some warnings being treated as errors > make[5]: *** [scripts/Makefile.build:283: drivers/net/ethernet/emulex/benet/be_main.o] Error 1 > make[4]: *** [scripts/Makefile.build:500: drivers/net/ethernet/emulex/benet] Error 2 > make[3]: *** [scripts/Makefile.build:500: drivers/net/ethernet/emulex] Error 2 > make[2]: *** [scripts/Makefile.build:500: drivers/net/ethernet] Error 2 > make[1]: *** [scripts/Makefile.build:500: drivers/net] Error 2 > make: *** [Makefile:1799: drivers] Error 2
Hi, What kernel version are you building? This should be fixed in 5.10-rc4 by commit 3347acc6fcd4ee71ad18a9ff9d9dac176b517329; specifically this portion of it:
diff --git a/include/asm-generic/barrier.h b/include/asm-generic/barrier.h index 798027bb89be..640f09479bdf 100644 --- a/include/asm-generic/barrier.h +++ b/include/asm-generic/barrier.h @@ -13,6 +13,7 @@ #ifndef __ASSEMBLY__ +#include <linux/compiler.h> #include <asm/rwonce.h> #ifndef nop
-- ~Randy
| |