On Mon, Oct 7, 2019 at 2:24 PM Sami Tolvanen <samitolva...@google.com> wrote: > > On Mon, Oct 7, 2019 at 1:28 PM 'Nick Desaulniers' via Clang Built > Linux <clang-built-li...@googlegroups.com> wrote: > > I tried adding `.arch armv8-a+lse` directives to all of the inline asm: > > https://github.com/ClangBuiltLinux/linux/issues/573#issuecomment-535098996 > > Yes, I had a similar patch earlier. I feel like using a command line > parameter here is cleaner, but I'm fine with either solution. > > > One thing to be careful about is that blankets the entire kernel in > > `+lse`, allowing LSE atomics to be selected at any point. > > Is that a problem? The current code allows LSE instructions with gcc > in any file that includes <asm/lse.h>, which turns out to be quite a > few places.
I may be mistaken, but I don't think inline asm directives allow the C compiler to change what instructions it selects for C code, but command line arguments to the C compiler do. Grepping the kernel for some of the functions and memory orderings turns up a few hits: https://gcc.gnu.org/onlinedocs/gcc/_005f_005fatomic-Builtins.html I'm worried that one of these might lower to LSE atomics without ALTERNATIVE guards by blanketing all C code with `-march=armv8-a+lse`. But I did just boot test this patch but using GAS in QEMU (on a -cpu cortex-a72 which I suspect should not have lse instructions by default IIUC), FWIW. Tested-by: Nick Desaulniers <ndesaulni...@google.com> Maybe the maintainers have more thoughts? -- Thanks, ~Nick Desaulniers