Message ID | 20200326080104.27286-11-masahiroy@kernel.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | x86, crypto: remove always-defined CONFIG_AS_* and cosolidate Kconfig/Makefiles | expand |
On Thu, Mar 26, 2020 at 1:02 AM Masahiro Yamada <masahiroy@kernel.org> wrote: > > From: "Jason A. Donenfeld" <Jason@zx2c4.com> > > Doing this probing inside of the Makefiles means we have a maze of > ifdefs inside the source code and child Makefiles that need to make > proper decisions on this too. Instead, we do it at Kconfig time, like > many other compiler and assembler options, which allows us to set up the > dependencies normally for full compilation units. In the process, the > ADX test changes to use %eax instead of %r10 so that it's valid in both > 32-bit and 64-bit mode. Does KConfig generate -D<foo> flags for KBUILD_CFLAGS and KBUILD_AFLAGS? Looks like lib/raid6/test/Makefile also generates some of these? > > Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com> > Signed-off-by: Masahiro Yamada <masahiroy@kernel.org> > --- > > Changes in v2: None > > arch/x86/Kconfig | 2 ++ > arch/x86/Kconfig.assembler | 17 +++++++++++++++++ > arch/x86/Makefile | 10 ---------- > 3 files changed, 19 insertions(+), 10 deletions(-) > create mode 100644 arch/x86/Kconfig.assembler > > diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig > index beea77046f9b..707673227837 100644 > --- a/arch/x86/Kconfig > +++ b/arch/x86/Kconfig > @@ -2935,3 +2935,5 @@ config HAVE_ATOMIC_IOMAP > source "drivers/firmware/Kconfig" > > source "arch/x86/kvm/Kconfig" > + > +source "arch/x86/Kconfig.assembler" > diff --git a/arch/x86/Kconfig.assembler b/arch/x86/Kconfig.assembler > new file mode 100644 > index 000000000000..91230bf11a14 > --- /dev/null > +++ b/arch/x86/Kconfig.assembler > @@ -0,0 +1,17 @@ > +# SPDX-License-Identifier: GPL-2.0 > +# Copyright (C) 2020 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved. > + > +config AS_AVX2 > + def_bool $(as-instr,vpbroadcastb %xmm0$(comma)%ymm1) > + > +config AS_AVX512 > + def_bool $(as-instr,vpmovm2b %k1$(comma)%zmm5) > + > +config AS_SHA1_NI > + def_bool $(as-instr,sha1msg1 %xmm0$(comma)%xmm1) > + > +config AS_SHA256_NI > + def_bool $(as-instr,sha256msg1 %xmm0$(comma)%xmm1) > + > +config AS_ADX > + def_bool $(as-instr,adox %eax$(comma)%eax) > diff --git a/arch/x86/Makefile b/arch/x86/Makefile > index f32ef7b8d5ca..b65ec63c7db7 100644 > --- a/arch/x86/Makefile > +++ b/arch/x86/Makefile > @@ -177,16 +177,6 @@ ifeq ($(ACCUMULATE_OUTGOING_ARGS), 1) > KBUILD_CFLAGS += $(call cc-option,-maccumulate-outgoing-args,) > endif > > -# does binutils support specific instructions? > -avx2_instr :=$(call as-instr,vpbroadcastb %xmm0$(comma)%ymm1,-DCONFIG_AS_AVX2=1) > -avx512_instr :=$(call as-instr,vpmovm2b %k1$(comma)%zmm5,-DCONFIG_AS_AVX512=1) > -sha1_ni_instr :=$(call as-instr,sha1msg1 %xmm0$(comma)%xmm1,-DCONFIG_AS_SHA1_NI=1) > -sha256_ni_instr :=$(call as-instr,sha256msg1 %xmm0$(comma)%xmm1,-DCONFIG_AS_SHA256_NI=1) > -adx_instr := $(call as-instr,adox %r10$(comma)%r10,-DCONFIG_AS_ADX=1) > - > -KBUILD_AFLAGS += $(avx2_instr) $(avx512_instr) $(sha1_ni_instr) $(sha256_ni_instr) $(adx_instr) > -KBUILD_CFLAGS += $(avx2_instr) $(avx512_instr) $(sha1_ni_instr) $(sha256_ni_instr) $(adx_instr) > - > KBUILD_LDFLAGS := -m elf_$(UTS_MACHINE) > > # > -- > 2.17.1 >
On Thu, Mar 26, 2020 at 11:49 AM Nick Desaulniers <ndesaulniers@google.com> wrote: > > On Thu, Mar 26, 2020 at 1:02 AM Masahiro Yamada <masahiroy@kernel.org> wrote: > > > > From: "Jason A. Donenfeld" <Jason@zx2c4.com> > > > > Doing this probing inside of the Makefiles means we have a maze of > > ifdefs inside the source code and child Makefiles that need to make > > proper decisions on this too. Instead, we do it at Kconfig time, like > > many other compiler and assembler options, which allows us to set up the > > dependencies normally for full compilation units. In the process, the > > ADX test changes to use %eax instead of %r10 so that it's valid in both > > 32-bit and 64-bit mode. > > Does KConfig generate -D<foo> flags for KBUILD_CFLAGS and KBUILD_AFLAGS? kconfig sticks everything it's got into include/generated/autoconf.h. That's how you're able to use all those #ifdef CONFIG_* macros already. This change moves things from a command line -D to the autoconf.h file. > Looks like lib/raid6/test/Makefile also generates some of these? raid6 has its own crazy thing going on. The test directory compiles that code for use in userspace. You might argue that its whole situation is non-standard and weird and should be reworked differently, but that seems like fodder for a different patchset on the linux-raid list.
On Thu, Mar 26, 2020 at 12:54 PM Jason A. Donenfeld <Jason@zx2c4.com> wrote: > > On Thu, Mar 26, 2020 at 11:49 AM Nick Desaulniers > <ndesaulniers@google.com> wrote: > > > > On Thu, Mar 26, 2020 at 1:02 AM Masahiro Yamada <masahiroy@kernel.org> wrote: > > > > > > From: "Jason A. Donenfeld" <Jason@zx2c4.com> > > > > > > Doing this probing inside of the Makefiles means we have a maze of > > > ifdefs inside the source code and child Makefiles that need to make > > > proper decisions on this too. Instead, we do it at Kconfig time, like > > > many other compiler and assembler options, which allows us to set up the > > > dependencies normally for full compilation units. In the process, the > > > ADX test changes to use %eax instead of %r10 so that it's valid in both > > > 32-bit and 64-bit mode. > > > > Does KConfig generate -D<foo> flags for KBUILD_CFLAGS and KBUILD_AFLAGS? > > kconfig sticks everything it's got into include/generated/autoconf.h. > That's how you're able to use all those #ifdef CONFIG_* macros > already. This change moves things from a command line -D to the > autoconf.h file. Cool, I wondered how that was wired up. Though seeing the word "autoconf" brings on PTSD for me. Patch LGTM. Reviewed-by: Nick Desaulniers <ndesaulniers@google.com> > > > Looks like lib/raid6/test/Makefile also generates some of these? > > raid6 has its own crazy thing going on. The test directory compiles > that code for use in userspace. You might argue that its whole > situation is non-standard and weird and should be reworked > differently, but that seems like fodder for a different patchset on > the linux-raid list.
diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig index beea77046f9b..707673227837 100644 --- a/arch/x86/Kconfig +++ b/arch/x86/Kconfig @@ -2935,3 +2935,5 @@ config HAVE_ATOMIC_IOMAP source "drivers/firmware/Kconfig" source "arch/x86/kvm/Kconfig" + +source "arch/x86/Kconfig.assembler" diff --git a/arch/x86/Kconfig.assembler b/arch/x86/Kconfig.assembler new file mode 100644 index 000000000000..91230bf11a14 --- /dev/null +++ b/arch/x86/Kconfig.assembler @@ -0,0 +1,17 @@ +# SPDX-License-Identifier: GPL-2.0 +# Copyright (C) 2020 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved. + +config AS_AVX2 + def_bool $(as-instr,vpbroadcastb %xmm0$(comma)%ymm1) + +config AS_AVX512 + def_bool $(as-instr,vpmovm2b %k1$(comma)%zmm5) + +config AS_SHA1_NI + def_bool $(as-instr,sha1msg1 %xmm0$(comma)%xmm1) + +config AS_SHA256_NI + def_bool $(as-instr,sha256msg1 %xmm0$(comma)%xmm1) + +config AS_ADX + def_bool $(as-instr,adox %eax$(comma)%eax) diff --git a/arch/x86/Makefile b/arch/x86/Makefile index f32ef7b8d5ca..b65ec63c7db7 100644 --- a/arch/x86/Makefile +++ b/arch/x86/Makefile @@ -177,16 +177,6 @@ ifeq ($(ACCUMULATE_OUTGOING_ARGS), 1) KBUILD_CFLAGS += $(call cc-option,-maccumulate-outgoing-args,) endif -# does binutils support specific instructions? -avx2_instr :=$(call as-instr,vpbroadcastb %xmm0$(comma)%ymm1,-DCONFIG_AS_AVX2=1) -avx512_instr :=$(call as-instr,vpmovm2b %k1$(comma)%zmm5,-DCONFIG_AS_AVX512=1) -sha1_ni_instr :=$(call as-instr,sha1msg1 %xmm0$(comma)%xmm1,-DCONFIG_AS_SHA1_NI=1) -sha256_ni_instr :=$(call as-instr,sha256msg1 %xmm0$(comma)%xmm1,-DCONFIG_AS_SHA256_NI=1) -adx_instr := $(call as-instr,adox %r10$(comma)%r10,-DCONFIG_AS_ADX=1) - -KBUILD_AFLAGS += $(avx2_instr) $(avx512_instr) $(sha1_ni_instr) $(sha256_ni_instr) $(adx_instr) -KBUILD_CFLAGS += $(avx2_instr) $(avx512_instr) $(sha1_ni_instr) $(sha256_ni_instr) $(adx_instr) - KBUILD_LDFLAGS := -m elf_$(UTS_MACHINE) #