Message ID | 20200109174948.48211-3-catalin.marinas@arm.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | arm64: Simplify gas LSE support detection | expand |
On 1/9/20 5:49 PM, Catalin Marinas wrote: > As the Kconfig syntax gained support for $(as-instr) tests, move the LSE > gas support detection from Makefile to the main arm64 Kconfig and remove > the additional CONFIG_AS_LSE definition and check. > > Cc: Will Deacon <will@kernel.org> > Signed-off-by: Catalin Marinas <catalin.marinas@arm.com> > --- > arch/arm64/Kconfig | 4 ++++ > arch/arm64/Makefile | 13 ++----------- > arch/arm64/include/asm/atomic_ll_sc.h | 2 +- > arch/arm64/include/asm/lse.h | 6 +++--- > arch/arm64/kernel/cpufeature.c | 4 ++-- > 5 files changed, 12 insertions(+), 17 deletions(-) > > diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig > index b1b4476ddb83..2a0521f0f156 100644 > --- a/arch/arm64/Kconfig > +++ b/arch/arm64/Kconfig > @@ -1362,8 +1362,12 @@ config ARM64_PAN > The feature is detected at runtime, and will remain as a 'nop' > instruction if the cpu does not implement the feature. > > +config ARM64_AS_HAS_LSE > + def_bool $(as-instr,.arch_extension lse) > + > config ARM64_LSE_ATOMICS > bool "Atomic instructions" > + depends on ARM64_AS_HAS_LSE > depends on JUMP_LABEL > default y > help > diff --git a/arch/arm64/Makefile b/arch/arm64/Makefile > index 1fbe24d4fdb6..cca6de192d42 100644 > --- a/arch/arm64/Makefile > +++ b/arch/arm64/Makefile > @@ -30,15 +30,6 @@ LDFLAGS_vmlinux += --fix-cortex-a53-843419 > endif > endif > > -# Check for binutils support for specific extensions > -lseinstr := $(call as-instr,.arch_extension lse,-DCONFIG_AS_LSE=1) > - > -ifeq ($(CONFIG_ARM64_LSE_ATOMICS), y) > - ifeq ($(lseinstr),) > -$(warning LSE atomics not supported by binutils) > - endif > -endif > - > cc_has_k_constraint := $(call try-run,echo \ > 'int main(void) { \ > asm volatile("and w0, w0, %w0" :: "K" (4294967295)); \ > @@ -53,11 +44,11 @@ $(warning Detected assembler with broken .inst; disassembly will be unreliable) > endif > endif > > -KBUILD_CFLAGS += -mgeneral-regs-only $(lseinstr) $(brokengasinst) \ > +KBUILD_CFLAGS += -mgeneral-regs-only $(brokengasinst) \ > $(compat_vdso) $(cc_has_k_constraint) > KBUILD_CFLAGS += -fno-asynchronous-unwind-tables > KBUILD_CFLAGS += $(call cc-disable-warning, psabi) > -KBUILD_AFLAGS += $(lseinstr) $(brokengasinst) $(compat_vdso) > +KBUILD_AFLAGS += $(brokengasinst) $(compat_vdso) > > KBUILD_CFLAGS += $(call cc-option,-mabi=lp64) > KBUILD_AFLAGS += $(call cc-option,-mabi=lp64) > diff --git a/arch/arm64/include/asm/atomic_ll_sc.h b/arch/arm64/include/asm/atomic_ll_sc.h > index 7b012148bfd6..13869b76b58c 100644 > --- a/arch/arm64/include/asm/atomic_ll_sc.h > +++ b/arch/arm64/include/asm/atomic_ll_sc.h > @@ -12,7 +12,7 @@ > > #include <linux/stringify.h> > > -#if IS_ENABLED(CONFIG_ARM64_LSE_ATOMICS) && IS_ENABLED(CONFIG_AS_LSE) > +#ifdef CONFIG_ARM64_LSE_ATOMICS > #define __LL_SC_FALLBACK(asm_ops) \ > " b 3f\n" \ > " .subsection 1\n" \ > diff --git a/arch/arm64/include/asm/lse.h b/arch/arm64/include/asm/lse.h > index 80b388278149..4e1009fff686 100644 > --- a/arch/arm64/include/asm/lse.h > +++ b/arch/arm64/include/asm/lse.h > @@ -4,7 +4,7 @@ > > #include <asm/atomic_ll_sc.h> > > -#if defined(CONFIG_AS_LSE) && defined(CONFIG_ARM64_LSE_ATOMICS) > +#ifdef CONFIG_ARM64_LSE_ATOMICS > > #include <linux/compiler_types.h> > #include <linux/export.h> > @@ -36,7 +36,7 @@ static inline bool system_uses_lse_atomics(void) > #define ARM64_LSE_ATOMIC_INSN(llsc, lse) \ > ALTERNATIVE(llsc, lse, ARM64_HAS_LSE_ATOMICS) > > -#else /* CONFIG_AS_LSE && CONFIG_ARM64_LSE_ATOMICS */ > +#else /* CONFIG_ARM64_LSE_ATOMICS */ > > static inline bool system_uses_lse_atomics(void) { return false; } > > @@ -44,5 +44,5 @@ static inline bool system_uses_lse_atomics(void) { return false; } > > #define ARM64_LSE_ATOMIC_INSN(llsc, lse) llsc > > -#endif /* CONFIG_AS_LSE && CONFIG_ARM64_LSE_ATOMICS */ > +#endif /* CONFIG_ARM64_LSE_ATOMICS */ > #endif /* __ASM_LSE_H */ > diff --git a/arch/arm64/kernel/cpufeature.c b/arch/arm64/kernel/cpufeature.c > index 04cf64e9f0c9..2595c2886d3f 100644 > --- a/arch/arm64/kernel/cpufeature.c > +++ b/arch/arm64/kernel/cpufeature.c > @@ -1291,7 +1291,7 @@ static const struct arm64_cpu_capabilities arm64_features[] = { > .cpu_enable = cpu_enable_pan, > }, > #endif /* CONFIG_ARM64_PAN */ > -#if defined(CONFIG_AS_LSE) && defined(CONFIG_ARM64_LSE_ATOMICS) > +#ifdef CONFIG_ARM64_LSE_ATOMICS > { > .desc = "LSE atomic instructions", > .capability = ARM64_HAS_LSE_ATOMICS, > @@ -1302,7 +1302,7 @@ static const struct arm64_cpu_capabilities arm64_features[] = { > .sign = FTR_UNSIGNED, > .min_field_value = 2, > }, > -#endif /* CONFIG_AS_LSE && CONFIG_ARM64_LSE_ATOMICS */ > +#endif /* CONFIG_ARM64_LSE_ATOMICS */ > { > .desc = "Software prefetching using PRFM", > .capability = ARM64_HAS_NO_HW_PREFETCH, > I was not lucky with the similar patch [1], anyway Reviewed-by: Vladimir Murzin <vladimir.murzin@arm.com> [1] https://www.spinics.net/lists/linux-crypto/msg36059.html Cheers Vladimir > _______________________________________________ > linux-arm-kernel mailing list > linux-arm-kernel@lists.infradead.org > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel >
On Fri, Jan 10, 2020 at 11:54:38AM +0000, Vladimir Murzin wrote: > On 1/9/20 5:49 PM, Catalin Marinas wrote: > > diff --git a/arch/arm64/kernel/cpufeature.c b/arch/arm64/kernel/cpufeature.c > > index 04cf64e9f0c9..2595c2886d3f 100644 > > --- a/arch/arm64/kernel/cpufeature.c > > +++ b/arch/arm64/kernel/cpufeature.c > > @@ -1291,7 +1291,7 @@ static const struct arm64_cpu_capabilities arm64_features[] = { > > .cpu_enable = cpu_enable_pan, > > }, > > #endif /* CONFIG_ARM64_PAN */ > > -#if defined(CONFIG_AS_LSE) && defined(CONFIG_ARM64_LSE_ATOMICS) > > +#ifdef CONFIG_ARM64_LSE_ATOMICS > > { > > .desc = "LSE atomic instructions", > > .capability = ARM64_HAS_LSE_ATOMICS, > > @@ -1302,7 +1302,7 @@ static const struct arm64_cpu_capabilities arm64_features[] = { > > .sign = FTR_UNSIGNED, > > .min_field_value = 2, > > }, > > -#endif /* CONFIG_AS_LSE && CONFIG_ARM64_LSE_ATOMICS */ > > +#endif /* CONFIG_ARM64_LSE_ATOMICS */ > > { > > .desc = "Software prefetching using PRFM", > > .capability = ARM64_HAS_NO_HW_PREFETCH, > > > > I was not lucky with the similar patch [1], anyway > > Reviewed-by: Vladimir Murzin <vladimir.murzin@arm.com> > > > [1] https://www.spinics.net/lists/linux-crypto/msg36059.html It's the loss of the warning that I object to, since I think it's a useful diagnostic to have. Is there some way we can keep that, but using the new kbuild logic? Will
On Fri, Jan 10, 2020 at 12:08:26PM +0000, Will Deacon wrote: > On Fri, Jan 10, 2020 at 11:54:38AM +0000, Vladimir Murzin wrote: > > On 1/9/20 5:49 PM, Catalin Marinas wrote: > > > diff --git a/arch/arm64/kernel/cpufeature.c b/arch/arm64/kernel/cpufeature.c > > > index 04cf64e9f0c9..2595c2886d3f 100644 > > > --- a/arch/arm64/kernel/cpufeature.c > > > +++ b/arch/arm64/kernel/cpufeature.c > > > @@ -1291,7 +1291,7 @@ static const struct arm64_cpu_capabilities arm64_features[] = { > > > .cpu_enable = cpu_enable_pan, > > > }, > > > #endif /* CONFIG_ARM64_PAN */ > > > -#if defined(CONFIG_AS_LSE) && defined(CONFIG_ARM64_LSE_ATOMICS) > > > +#ifdef CONFIG_ARM64_LSE_ATOMICS > > > { > > > .desc = "LSE atomic instructions", > > > .capability = ARM64_HAS_LSE_ATOMICS, > > > @@ -1302,7 +1302,7 @@ static const struct arm64_cpu_capabilities arm64_features[] = { > > > .sign = FTR_UNSIGNED, > > > .min_field_value = 2, > > > }, > > > -#endif /* CONFIG_AS_LSE && CONFIG_ARM64_LSE_ATOMICS */ > > > +#endif /* CONFIG_ARM64_LSE_ATOMICS */ > > > { > > > .desc = "Software prefetching using PRFM", > > > .capability = ARM64_HAS_NO_HW_PREFETCH, > > > > > > > I was not lucky with the similar patch [1], anyway > > > > Reviewed-by: Vladimir Murzin <vladimir.murzin@arm.com> > > > > > > [1] https://www.spinics.net/lists/linux-crypto/msg36059.html > > It's the loss of the warning that I object to, since I think it's a useful > diagnostic to have. Is there some way we can keep that, but using the new > kbuild logic? With the kbuild logic, you can't select CONFIG_ARM64_LSE_ATOMICS because CONFIG_AS_HAS_LSE is n (when gas doesn't support LSE). I consider this a good indication to the user trying to enable it without the need for a warning. The alternative is to let the user state their preference with a config option without any dependencies: config ARM64_WANT_LSE_ATOMICS bool "..." depends on JUMP_LABEL default y config ARM64_LSE_ATOMICS def_bool CONFIG_ARM64_WANT_LSE_ATOMICS depends on CONFIG_AS_HAS_LSE and in the Makefile, warn if CONFIG_ARM64_WANT_LSE_ATOMICS && !CONFIG_ARM64_LSE_ATOMICS. You can even get the warning directly from kbuild if you select ARM64_LSE_ATOMICS from ARM64_WANT_* (unmet dependency). I personally don't think it's worth the hassle. We don't warn if the compiler doesn't support jump labels, why would we do this for LSE.
On Fri, Jan 10, 2020 at 03:30:14PM +0000, Catalin Marinas wrote: > On Fri, Jan 10, 2020 at 12:08:26PM +0000, Will Deacon wrote: > > On Fri, Jan 10, 2020 at 11:54:38AM +0000, Vladimir Murzin wrote: > > > On 1/9/20 5:49 PM, Catalin Marinas wrote: > > > > diff --git a/arch/arm64/kernel/cpufeature.c b/arch/arm64/kernel/cpufeature.c > > > > index 04cf64e9f0c9..2595c2886d3f 100644 > > > > --- a/arch/arm64/kernel/cpufeature.c > > > > +++ b/arch/arm64/kernel/cpufeature.c > > > > @@ -1291,7 +1291,7 @@ static const struct arm64_cpu_capabilities arm64_features[] = { > > > > .cpu_enable = cpu_enable_pan, > > > > }, > > > > #endif /* CONFIG_ARM64_PAN */ > > > > -#if defined(CONFIG_AS_LSE) && defined(CONFIG_ARM64_LSE_ATOMICS) > > > > +#ifdef CONFIG_ARM64_LSE_ATOMICS > > > > { > > > > .desc = "LSE atomic instructions", > > > > .capability = ARM64_HAS_LSE_ATOMICS, > > > > @@ -1302,7 +1302,7 @@ static const struct arm64_cpu_capabilities arm64_features[] = { > > > > .sign = FTR_UNSIGNED, > > > > .min_field_value = 2, > > > > }, > > > > -#endif /* CONFIG_AS_LSE && CONFIG_ARM64_LSE_ATOMICS */ > > > > +#endif /* CONFIG_ARM64_LSE_ATOMICS */ > > > > { > > > > .desc = "Software prefetching using PRFM", > > > > .capability = ARM64_HAS_NO_HW_PREFETCH, > > > > > > > > > > I was not lucky with the similar patch [1], anyway > > > > > > Reviewed-by: Vladimir Murzin <vladimir.murzin@arm.com> > > > > > > > > > [1] https://www.spinics.net/lists/linux-crypto/msg36059.html > > > > It's the loss of the warning that I object to, since I think it's a useful > > diagnostic to have. Is there some way we can keep that, but using the new > > kbuild logic? > > With the kbuild logic, you can't select CONFIG_ARM64_LSE_ATOMICS because > CONFIG_AS_HAS_LSE is n (when gas doesn't support LSE). I consider this a > good indication to the user trying to enable it without the need for a > warning. > > The alternative is to let the user state their preference with a config > option without any dependencies: > > config ARM64_WANT_LSE_ATOMICS > bool "..." > depends on JUMP_LABEL > default y > > config ARM64_LSE_ATOMICS > def_bool CONFIG_ARM64_WANT_LSE_ATOMICS > depends on CONFIG_AS_HAS_LSE > > and in the Makefile, warn if CONFIG_ARM64_WANT_LSE_ATOMICS && > !CONFIG_ARM64_LSE_ATOMICS. > > You can even get the warning directly from kbuild if you select > ARM64_LSE_ATOMICS from ARM64_WANT_* (unmet dependency). > > I personally don't think it's worth the hassle. We don't warn if the > compiler doesn't support jump labels, why would we do this for LSE. The thing I dislike about it is that if somebody sends you a .config with LSE enabled, and your compiler doesn't support it, then it silently get disabled. There are two differences with jump labels: 1. Most compilers support jump labels 2. LSE atomics also depend on the CPU features before they get enabled at runtime. Mainly because of (2), I think silently disabling LSE at build time is really confusing when you're trying to figure out why it's not in use. Will
On Fri, Jan 10, 2020 at 03:45:43PM +0000, Will Deacon wrote: > On Fri, Jan 10, 2020 at 03:30:14PM +0000, Catalin Marinas wrote: > > On Fri, Jan 10, 2020 at 12:08:26PM +0000, Will Deacon wrote: > > > On Fri, Jan 10, 2020 at 11:54:38AM +0000, Vladimir Murzin wrote: > > > > I was not lucky with the similar patch [1], anyway > > > > > > > > Reviewed-by: Vladimir Murzin <vladimir.murzin@arm.com> > > > > > > > > [1] https://www.spinics.net/lists/linux-crypto/msg36059.html > > > > > > It's the loss of the warning that I object to, since I think it's a useful > > > diagnostic to have. Is there some way we can keep that, but using the new > > > kbuild logic? [...] > The thing I dislike about it is that if somebody sends you a .config with > LSE enabled, and your compiler doesn't support it, then it silently get > disabled. I was thinking the other way. Someone sending me a .config file and I can't tell whether LSE was built into their kernel or not unless they also send the build log (I haven't seen anyone do this). At least for my local compiler, I have some control over it and can compare the resulting .config file. It would have been nice if oldconfig warned of features being disabled but I guess it would become too noisy. To accommodate the two scenarios, what about this diff on top of patch 2 (I can fold it in in v2 and feel free to suggest better config names): -------8<------------------------- diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig index 2a0521f0f156..cf3b6d2a67cf 100644 --- a/arch/arm64/Kconfig +++ b/arch/arm64/Kconfig @@ -1362,12 +1362,13 @@ config ARM64_PAN The feature is detected at runtime, and will remain as a 'nop' instruction if the cpu does not implement the feature. -config ARM64_AS_HAS_LSE - def_bool $(as-instr,.arch_extension lse) - config ARM64_LSE_ATOMICS + bool + default ARM64_USE_LSE_ATOMICS + depends on $(as-instr,.arch_extension lse) + +config ARM64_USE_LSE_ATOMICS bool "Atomic instructions" - depends on ARM64_AS_HAS_LSE depends on JUMP_LABEL default y help diff --git a/arch/arm64/Makefile b/arch/arm64/Makefile index cca6de192d42..6dd8ecacc428 100644 --- a/arch/arm64/Makefile +++ b/arch/arm64/Makefile @@ -30,6 +30,12 @@ LDFLAGS_vmlinux += --fix-cortex-a53-843419 endif endif +ifeq ($(CONFIG_ARM64_USE_LSE_ATOMICS), y) + ifneq ($(CONFIG_ARM64_LSE_ATOMICS), y) +$(warning LSE atomics not supported by binutils) + endif +endif + cc_has_k_constraint := $(call try-run,echo \ 'int main(void) { \ asm volatile("and w0, w0, %w0" :: "K" (4294967295)); \
On Mon, Jan 13, 2020 at 11:36:14AM +0000, Catalin Marinas wrote: > On Fri, Jan 10, 2020 at 03:45:43PM +0000, Will Deacon wrote: > > On Fri, Jan 10, 2020 at 03:30:14PM +0000, Catalin Marinas wrote: > > > On Fri, Jan 10, 2020 at 12:08:26PM +0000, Will Deacon wrote: > > > > On Fri, Jan 10, 2020 at 11:54:38AM +0000, Vladimir Murzin wrote: > > > > > I was not lucky with the similar patch [1], anyway > > > > > > > > > > Reviewed-by: Vladimir Murzin <vladimir.murzin@arm.com> > > > > > > > > > > [1] https://www.spinics.net/lists/linux-crypto/msg36059.html > > > > > > > > It's the loss of the warning that I object to, since I think it's a useful > > > > diagnostic to have. Is there some way we can keep that, but using the new > > > > kbuild logic? > [...] > > The thing I dislike about it is that if somebody sends you a .config with > > LSE enabled, and your compiler doesn't support it, then it silently get > > disabled. > > I was thinking the other way. Someone sending me a .config file and I > can't tell whether LSE was built into their kernel or not unless they > also send the build log (I haven't seen anyone do this). At least for my > local compiler, I have some control over it and can compare the > resulting .config file. It would have been nice if oldconfig warned of > features being disabled but I guess it would become too noisy. > > To accommodate the two scenarios, what about this diff on top of patch 2 > (I can fold it in in v2 and feel free to suggest better config names): > > -------8<------------------------- > diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig > index 2a0521f0f156..cf3b6d2a67cf 100644 > --- a/arch/arm64/Kconfig > +++ b/arch/arm64/Kconfig > @@ -1362,12 +1362,13 @@ config ARM64_PAN > The feature is detected at runtime, and will remain as a 'nop' > instruction if the cpu does not implement the feature. > > -config ARM64_AS_HAS_LSE > - def_bool $(as-instr,.arch_extension lse) > - > config ARM64_LSE_ATOMICS > + bool > + default ARM64_USE_LSE_ATOMICS > + depends on $(as-instr,.arch_extension lse) > + > +config ARM64_USE_LSE_ATOMICS > bool "Atomic instructions" > - depends on ARM64_AS_HAS_LSE > depends on JUMP_LABEL > default y > help > diff --git a/arch/arm64/Makefile b/arch/arm64/Makefile > index cca6de192d42..6dd8ecacc428 100644 > --- a/arch/arm64/Makefile > +++ b/arch/arm64/Makefile > @@ -30,6 +30,12 @@ LDFLAGS_vmlinux += --fix-cortex-a53-843419 > endif > endif > > +ifeq ($(CONFIG_ARM64_USE_LSE_ATOMICS), y) > + ifneq ($(CONFIG_ARM64_LSE_ATOMICS), y) > +$(warning LSE atomics not supported by binutils) > + endif > +endif > + This looks good to me; I'll apply v2 when you post it. Cheers, Will
diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig index b1b4476ddb83..2a0521f0f156 100644 --- a/arch/arm64/Kconfig +++ b/arch/arm64/Kconfig @@ -1362,8 +1362,12 @@ config ARM64_PAN The feature is detected at runtime, and will remain as a 'nop' instruction if the cpu does not implement the feature. +config ARM64_AS_HAS_LSE + def_bool $(as-instr,.arch_extension lse) + config ARM64_LSE_ATOMICS bool "Atomic instructions" + depends on ARM64_AS_HAS_LSE depends on JUMP_LABEL default y help diff --git a/arch/arm64/Makefile b/arch/arm64/Makefile index 1fbe24d4fdb6..cca6de192d42 100644 --- a/arch/arm64/Makefile +++ b/arch/arm64/Makefile @@ -30,15 +30,6 @@ LDFLAGS_vmlinux += --fix-cortex-a53-843419 endif endif -# Check for binutils support for specific extensions -lseinstr := $(call as-instr,.arch_extension lse,-DCONFIG_AS_LSE=1) - -ifeq ($(CONFIG_ARM64_LSE_ATOMICS), y) - ifeq ($(lseinstr),) -$(warning LSE atomics not supported by binutils) - endif -endif - cc_has_k_constraint := $(call try-run,echo \ 'int main(void) { \ asm volatile("and w0, w0, %w0" :: "K" (4294967295)); \ @@ -53,11 +44,11 @@ $(warning Detected assembler with broken .inst; disassembly will be unreliable) endif endif -KBUILD_CFLAGS += -mgeneral-regs-only $(lseinstr) $(brokengasinst) \ +KBUILD_CFLAGS += -mgeneral-regs-only $(brokengasinst) \ $(compat_vdso) $(cc_has_k_constraint) KBUILD_CFLAGS += -fno-asynchronous-unwind-tables KBUILD_CFLAGS += $(call cc-disable-warning, psabi) -KBUILD_AFLAGS += $(lseinstr) $(brokengasinst) $(compat_vdso) +KBUILD_AFLAGS += $(brokengasinst) $(compat_vdso) KBUILD_CFLAGS += $(call cc-option,-mabi=lp64) KBUILD_AFLAGS += $(call cc-option,-mabi=lp64) diff --git a/arch/arm64/include/asm/atomic_ll_sc.h b/arch/arm64/include/asm/atomic_ll_sc.h index 7b012148bfd6..13869b76b58c 100644 --- a/arch/arm64/include/asm/atomic_ll_sc.h +++ b/arch/arm64/include/asm/atomic_ll_sc.h @@ -12,7 +12,7 @@ #include <linux/stringify.h> -#if IS_ENABLED(CONFIG_ARM64_LSE_ATOMICS) && IS_ENABLED(CONFIG_AS_LSE) +#ifdef CONFIG_ARM64_LSE_ATOMICS #define __LL_SC_FALLBACK(asm_ops) \ " b 3f\n" \ " .subsection 1\n" \ diff --git a/arch/arm64/include/asm/lse.h b/arch/arm64/include/asm/lse.h index 80b388278149..4e1009fff686 100644 --- a/arch/arm64/include/asm/lse.h +++ b/arch/arm64/include/asm/lse.h @@ -4,7 +4,7 @@ #include <asm/atomic_ll_sc.h> -#if defined(CONFIG_AS_LSE) && defined(CONFIG_ARM64_LSE_ATOMICS) +#ifdef CONFIG_ARM64_LSE_ATOMICS #include <linux/compiler_types.h> #include <linux/export.h> @@ -36,7 +36,7 @@ static inline bool system_uses_lse_atomics(void) #define ARM64_LSE_ATOMIC_INSN(llsc, lse) \ ALTERNATIVE(llsc, lse, ARM64_HAS_LSE_ATOMICS) -#else /* CONFIG_AS_LSE && CONFIG_ARM64_LSE_ATOMICS */ +#else /* CONFIG_ARM64_LSE_ATOMICS */ static inline bool system_uses_lse_atomics(void) { return false; } @@ -44,5 +44,5 @@ static inline bool system_uses_lse_atomics(void) { return false; } #define ARM64_LSE_ATOMIC_INSN(llsc, lse) llsc -#endif /* CONFIG_AS_LSE && CONFIG_ARM64_LSE_ATOMICS */ +#endif /* CONFIG_ARM64_LSE_ATOMICS */ #endif /* __ASM_LSE_H */ diff --git a/arch/arm64/kernel/cpufeature.c b/arch/arm64/kernel/cpufeature.c index 04cf64e9f0c9..2595c2886d3f 100644 --- a/arch/arm64/kernel/cpufeature.c +++ b/arch/arm64/kernel/cpufeature.c @@ -1291,7 +1291,7 @@ static const struct arm64_cpu_capabilities arm64_features[] = { .cpu_enable = cpu_enable_pan, }, #endif /* CONFIG_ARM64_PAN */ -#if defined(CONFIG_AS_LSE) && defined(CONFIG_ARM64_LSE_ATOMICS) +#ifdef CONFIG_ARM64_LSE_ATOMICS { .desc = "LSE atomic instructions", .capability = ARM64_HAS_LSE_ATOMICS, @@ -1302,7 +1302,7 @@ static const struct arm64_cpu_capabilities arm64_features[] = { .sign = FTR_UNSIGNED, .min_field_value = 2, }, -#endif /* CONFIG_AS_LSE && CONFIG_ARM64_LSE_ATOMICS */ +#endif /* CONFIG_ARM64_LSE_ATOMICS */ { .desc = "Software prefetching using PRFM", .capability = ARM64_HAS_NO_HW_PREFETCH,
As the Kconfig syntax gained support for $(as-instr) tests, move the LSE gas support detection from Makefile to the main arm64 Kconfig and remove the additional CONFIG_AS_LSE definition and check. Cc: Will Deacon <will@kernel.org> Signed-off-by: Catalin Marinas <catalin.marinas@arm.com> --- arch/arm64/Kconfig | 4 ++++ arch/arm64/Makefile | 13 ++----------- arch/arm64/include/asm/atomic_ll_sc.h | 2 +- arch/arm64/include/asm/lse.h | 6 +++--- arch/arm64/kernel/cpufeature.c | 4 ++-- 5 files changed, 12 insertions(+), 17 deletions(-)