All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/2] arm64: Simplify gas LSE support detection
@ 2020-01-09 17:49 Catalin Marinas
  2020-01-09 17:49 ` [PATCH 1/2] kbuild: Add support for 'as-instr' to be used in Kconfig files Catalin Marinas
  2020-01-09 17:49 ` [PATCH 2/2] arm64: Move the LSE gas support detection to Kconfig Catalin Marinas
  0 siblings, 2 replies; 9+ messages in thread
From: Catalin Marinas @ 2020-01-09 17:49 UTC (permalink / raw)
  To: linux-arm-kernel; +Cc: Will Deacon

The first patch was developed as part the of the MTE support [1] and
acked by the kbuild maintainers [2].

The second patch removes the Makefile logic to define CONFIG_AS_LSE
since the $(as-instr) check can now be handled in Kconfig.

[1] https://lore.kernel.org/linux-arm-kernel/20191211184027.20130-3-catalin.marinas@arm.com/
[2] https://lore.kernel.org/linux-arm-kernel/CAK7LNARR=DjdnZdu=L+0H8ALr4XJNpVbcRTOz_sVZdZpcM0pdQ@mail.gmail.com/

Catalin Marinas (2):
  kbuild: Add support for 'as-instr' to be used in Kconfig files
  arm64: Move the LSE gas support detection to Kconfig

 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 ++--
 scripts/Kconfig.include               |  4 ++++
 6 files changed, 16 insertions(+), 17 deletions(-)


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [PATCH 1/2] kbuild: Add support for 'as-instr' to be used in Kconfig files
  2020-01-09 17:49 [PATCH 0/2] arm64: Simplify gas LSE support detection Catalin Marinas
@ 2020-01-09 17:49 ` Catalin Marinas
  2020-01-09 17:49 ` [PATCH 2/2] arm64: Move the LSE gas support detection to Kconfig Catalin Marinas
  1 sibling, 0 replies; 9+ messages in thread
From: Catalin Marinas @ 2020-01-09 17:49 UTC (permalink / raw)
  To: linux-arm-kernel; +Cc: Will Deacon

Similar to 'cc-option' or 'ld-option', it is occasionally necessary to
check whether the assembler supports certain ISA extensions. In the
arm64 code we currently do this in Makefile with an additional define:

lseinstr := $(call as-instr,.arch_extension lse,-DCONFIG_AS_LSE=1)

Add the 'as-instr' option so that it can be used in Kconfig directly:

	def_bool $(as-instr,.arch_extension lse)

Acked-by: Masahiro Yamada <masahiroy@kernel.org>
Reviewed-by: Vladimir Murzin <vladimir.murzin@arm.com>
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
---
 scripts/Kconfig.include | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/scripts/Kconfig.include b/scripts/Kconfig.include
index d4adfbe42690..9d07e59cbdf7 100644
--- a/scripts/Kconfig.include
+++ b/scripts/Kconfig.include
@@ -31,6 +31,10 @@ cc-option = $(success,$(CC) -Werror $(CLANG_FLAGS) $(1) -E -x c /dev/null -o /de
 # Return y if the linker supports <flag>, n otherwise
 ld-option = $(success,$(LD) -v $(1))
 
+# $(as-instr,<instr>)
+# Return y if the assembler supports <instr>, n otherwise
+as-instr = $(success,printf "%b\n" "$(1)" | $(CC) $(CLANG_FLAGS) -c -x assembler -o /dev/null -)
+
 # check if $(CC) and $(LD) exist
 $(error-if,$(failure,command -v $(CC)),compiler '$(CC)' not found)
 $(error-if,$(failure,command -v $(LD)),linker '$(LD)' not found)

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH 2/2] arm64: Move the LSE gas support detection to Kconfig
  2020-01-09 17:49 [PATCH 0/2] arm64: Simplify gas LSE support detection Catalin Marinas
  2020-01-09 17:49 ` [PATCH 1/2] kbuild: Add support for 'as-instr' to be used in Kconfig files Catalin Marinas
@ 2020-01-09 17:49 ` Catalin Marinas
  2020-01-10 11:54   ` Vladimir Murzin
  1 sibling, 1 reply; 9+ messages in thread
From: Catalin Marinas @ 2020-01-09 17:49 UTC (permalink / raw)
  To: linux-arm-kernel; +Cc: Will Deacon

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,

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* Re: [PATCH 2/2] arm64: Move the LSE gas support detection to Kconfig
  2020-01-09 17:49 ` [PATCH 2/2] arm64: Move the LSE gas support detection to Kconfig Catalin Marinas
@ 2020-01-10 11:54   ` Vladimir Murzin
  2020-01-10 12:08     ` Will Deacon
  0 siblings, 1 reply; 9+ messages in thread
From: Vladimir Murzin @ 2020-01-10 11:54 UTC (permalink / raw)
  To: Catalin Marinas, linux-arm-kernel; +Cc: Will Deacon

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
> 


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH 2/2] arm64: Move the LSE gas support detection to Kconfig
  2020-01-10 11:54   ` Vladimir Murzin
@ 2020-01-10 12:08     ` Will Deacon
  2020-01-10 15:30       ` Catalin Marinas
  0 siblings, 1 reply; 9+ messages in thread
From: Will Deacon @ 2020-01-10 12:08 UTC (permalink / raw)
  To: Vladimir Murzin; +Cc: Catalin Marinas, 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

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH 2/2] arm64: Move the LSE gas support detection to Kconfig
  2020-01-10 12:08     ` Will Deacon
@ 2020-01-10 15:30       ` Catalin Marinas
  2020-01-10 15:45         ` Will Deacon
  0 siblings, 1 reply; 9+ messages in thread
From: Catalin Marinas @ 2020-01-10 15:30 UTC (permalink / raw)
  To: Will Deacon; +Cc: Vladimir Murzin, linux-arm-kernel

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.

-- 
Catalin

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH 2/2] arm64: Move the LSE gas support detection to Kconfig
  2020-01-10 15:30       ` Catalin Marinas
@ 2020-01-10 15:45         ` Will Deacon
  2020-01-13 11:36           ` Catalin Marinas
  0 siblings, 1 reply; 9+ messages in thread
From: Will Deacon @ 2020-01-10 15:45 UTC (permalink / raw)
  To: Catalin Marinas; +Cc: Vladimir Murzin, linux-arm-kernel

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

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH 2/2] arm64: Move the LSE gas support detection to Kconfig
  2020-01-10 15:45         ` Will Deacon
@ 2020-01-13 11:36           ` Catalin Marinas
  2020-01-14 17:19             ` Will Deacon
  0 siblings, 1 reply; 9+ messages in thread
From: Catalin Marinas @ 2020-01-13 11:36 UTC (permalink / raw)
  To: Will Deacon; +Cc: Vladimir Murzin, linux-arm-kernel

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));	\

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* Re: [PATCH 2/2] arm64: Move the LSE gas support detection to Kconfig
  2020-01-13 11:36           ` Catalin Marinas
@ 2020-01-14 17:19             ` Will Deacon
  0 siblings, 0 replies; 9+ messages in thread
From: Will Deacon @ 2020-01-14 17:19 UTC (permalink / raw)
  To: Catalin Marinas; +Cc: Vladimir Murzin, linux-arm-kernel

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

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2020-01-14 17:19 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-01-09 17:49 [PATCH 0/2] arm64: Simplify gas LSE support detection Catalin Marinas
2020-01-09 17:49 ` [PATCH 1/2] kbuild: Add support for 'as-instr' to be used in Kconfig files Catalin Marinas
2020-01-09 17:49 ` [PATCH 2/2] arm64: Move the LSE gas support detection to Kconfig Catalin Marinas
2020-01-10 11:54   ` Vladimir Murzin
2020-01-10 12:08     ` Will Deacon
2020-01-10 15:30       ` Catalin Marinas
2020-01-10 15:45         ` Will Deacon
2020-01-13 11:36           ` Catalin Marinas
2020-01-14 17:19             ` Will Deacon

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.