powerpc/barrier: Avoid collision with clang's __lwsync macro
Subsystems (2)
PATCH 1/1 powerpc/barrier: Avoid collision with clang's __lwsync macro
A change in clang 13 results in the __lwsync macro being defined as __builtin_ppc_lwsync, which emits 'lwsync' or 'msync' depending on what the target supports. This breaks the build because of -Werror in arch/powerpc, along with thousands of warnings:
In file included from arch/powerpc/kernel/pmc.c:12:
In file included from include/linux/bug.h:5:
In file included from arch/powerpc/include/asm/bug.h:109:
In file included from include/asm-generic/bug.h:20:
In file included from include/linux/kernel.h:12:
In file included from include/linux/bitops.h:32:
In file included from arch/powerpc/include/asm/bitops.h:62:
arch/powerpc/include/asm/barrier.h:49:9: error: '__lwsync' macro redefined [-Werror,-Wmacro-redefined]
#define __lwsync() __asm__ __volatile__ (stringify_in_c(LWSYNC) : : :"memory")
^
<built-in>:308:9: note: previous definition is here
#define __lwsync __builtin_ppc_lwsync
^1 error generated.
Undefine this macro so that the runtime patching introduced by commit 2d1b2027626d ("powerpc: Fixup lwsync at runtime") continues to work properly with clang and the build no longer breaks.
--- arch/powerpc/include/asm/barrier.h | 2 ++ 1 file changed, 2 insertions(+)
arch/powerpc/include/asm/barrier.h +2 -0
@@ -46,6 +46,8 @@# define SMPWMB eieio#endif +/* clang defines this macro for a builtin, which will not work with runtime patching */ +#undef __lwsync#define __lwsync () __asm__ __volatile__ (stringify_in_c(LWSYNC) : : :"memory")#define dma_rmb () __lwsync()#define dma_wmb () __asm__ __volatile__ (stringify_in_c(SMPWMB) : : :"memory")
base-commit: 97e5bf604b7a0d6e1b3e00fe31d5fd4b9bffeaae
Signature · 1 line
2.32.0.rc0
Quoted 4 lines · Nathan Chancellor
A change in clang 13 results in the
__lwsyncmacro being defined as__builtin_ppc_lwsync, which emits 'lwsync' or 'msync' depending on what the target supports.
Indeed,
$ clang --target=powerpc64le-linux-gnu -mcpu=e500 -m32 for example.
Thanks for the patch!
Quoted 48 lines
This breaks the build because of -Werror in
arch/powerpc, along with thousands of warnings:In file included from
arch/powerpc/kernel/pmc.c:12:
In file included frominclude/linux/bug.h:5:
In file included fromarch/powerpc/include/asm/bug.h:109:
In file included frominclude/asm-generic/bug.h:20:
In file included frominclude/linux/kernel.h:12:
In file included frominclude/linux/bitops.h:32:
In file included fromarch/powerpc/include/asm/bitops.h:62:
arch/powerpc/include/asm/barrier.h:49:9: error: '__lwsync' macro redefined [-Werror,-Wmacro-redefined]#define __lwsync() __asm__ __volatile__ (stringify_in_c(LWSYNC) : : :"memory") ^ <built-in>:308:9: note: previous definition is here #define __lwsync __builtin_ppc_lwsync ^1 error generated.
Undefine this macro so that the runtime patching introduced by commit
2d1b2027626d("powerpc: Fixup lwsync at runtime") continues to work properly with clang and the build no longer breaks.Signed-off-by Nathan Chancellor <[email protected]>--- arch/powerpc/include/asm/barrier.h | 2 ++ 1 file changed, 2 insertions(+)arch/powerpc/include/asm/barrier.h +2
-0@@ -46,6 +46,8 @@# define SMPWMB eieio#endif +/* clang defines this macro for a builtin, which will not work with runtime patching */ +#undef __lwsync#define __lwsync () __asm__ __volatile__ (stringify_in_c(LWSYNC) : : :"memory")#define dma_rmb () __lwsync()#define dma_wmb () __asm__ __volatile__ (stringify_in_c(SMPWMB) : : :"memory")base-commit:
97e5bf604b7a0d6e1b3e00fe31d5fd4b9bffeaae--
2.32.0.rc0
Signature · 2 lines
Thanks, ~Nick Desaulniers
Michael Ellerman
AppliedQuoted 13 lines · Nathan Chancellor
A change in clang 13 results in the
__lwsyncmacro being defined as__builtin_ppc_lwsync, which emits 'lwsync' or 'msync' depending on what the target supports. This breaks the build because of -Werror inarch/powerpc, along with thousands of warnings:In file included from
arch/powerpc/kernel/pmc.c:12:
In file included frominclude/linux/bug.h:5:
In file included fromarch/powerpc/include/asm/bug.h:109:
In file included frominclude/asm-generic/bug.h:20:
In file included frominclude/linux/kernel.h:12:
In file included frominclude/linux/bitops.h:32:
In file included fromarch/powerpc/include/asm/bitops.h:62:
arch/powerpc/include/asm/barrier.h:49:9: error: '__lwsync' macro redefined [-Werror,-Wmacro-redefined]
Quoted 8 lines
#define __lwsync() __asm__ __volatile__ (stringify_in_c(LWSYNC) : : :"memory") ^ <built-in>:308:9: note: previous definition is here #define __lwsync __builtin_ppc_lwsync ^1 error generated.
[...]
Applied to powerpc/next.
[1/1] powerpc/barrier: Avoid collision with clang's __lwsync macro
https://git.kernel.org/powerpc/c/015d98149b326e0f1f02e44413112ca8b4330543
cheers