[PATCH v5 00/10] arm64: avoid out-of-line ll/sc atomics
From: Will Deacon <will@kernel.org>
Date: 2019-08-29 15:48:46
Hi all, This is a version five of the patches previously posted by Andrew here: v4: http://lkml.kernel.org/r/20190828175009.15457-1-andrew.murray@arm.com The reason I'm posting this is because I spotted an issue with the above when queuing it for 5.4 and fixing it ended up with me spinning a few patches on top. The basic problem is that by implementing our atomic routines using a static key to select between the LL/SC and LSE variant, we rely on CONFIG_JUMP_LABEL and therefore CC_HAS_ASM_GOTO because otherwise the static key implementation itself is implementing using atomic routines, which leads to complete disaster. This patch series builds on top of Andrew's patches, with the following changes: * Tidying up the header files in preparation for... * ...making LSE depend on JUMP_LABEL * Support for the 'K' constraint when it looks like it works * Minor massaging of commit logs This means that LSE atomics are not available for in-kernel use when building with a version of clang without 'asm goto' support. I really don't see a way around this, but I've been told that clang-9 should have this support so that's at least something. Will Cc: Ard.Biesheuvel@arm.com Cc: peterz@infradead.org Cc: andrew.murray@arm.com Cc: mark.rutland@arm.com Cc: catalin.marinas@arm.com Cc: robin.murphy@arm.com Cc: ndesaulniers@google.com Cc: natechancellor@gmail.com --->8 Andrew Murray (5): jump_label: Don't warn on __exit jump entries arm64: Use correct ll/sc atomic constraints arm64: atomics: avoid out-of-line ll/sc atomics arm64: avoid using hard-coded registers for LSE atomics arm64: atomics: Remove atomic_ll_sc compilation unit Will Deacon (5): arm64: lse: Remove unused 'alt_lse' assembly macro arm64: asm: Kill 'asm/atomic_arch.h' arm64: lse: Make ARM64_LSE_ATOMICS depend on JUMP_LABEL arm64: atomics: Undefine internal macros after use arm64: atomics: Use K constraint when toolchain appears to support it arch/arm64/Kconfig | 1 + arch/arm64/Makefile | 9 +- arch/arm64/include/asm/atomic.h | 93 +++++++- arch/arm64/include/asm/atomic_ll_sc.h | 215 +++++++++--------- arch/arm64/include/asm/atomic_lse.h | 395 ++++++++++++---------------------- arch/arm64/include/asm/cmpxchg.h | 45 +++- arch/arm64/include/asm/lse.h | 49 ++--- arch/arm64/lib/Makefile | 19 -- arch/arm64/lib/atomic_ll_sc.c | 3 - kernel/jump_label.c | 4 +- 10 files changed, 413 insertions(+), 420 deletions(-) delete mode 100644 arch/arm64/lib/atomic_ll_sc.c -- 2.11.0 _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel