diff mbox series

[5/7] x86: remove always-defined CONFIG_AS_SSSE3

Message ID 20200323020844.17064-6-masahiroy@kernel.org (mailing list archive)
State Not Applicable
Delegated to: Herbert Xu
Headers show
Series x86: remove always-defined CONFIG_AS_* options | expand

Commit Message

Masahiro Yamada March 23, 2020, 2:08 a.m. UTC
CONFIG_AS_SSSE3 was introduced by commit 75aaf4c3e6a4 ("x86/raid6:
correctly check for assembler capabilities").

We raise the minimal supported binutils version from time to time.
The last bump was commit 1fb12b35e5ff ("kbuild: Raise the minimum
required binutils version to 2.21").

I confirmed the code in $(call as-instr,...) can be assembled by the
binutils 2.21 assembler and also by LLVM integrated assembler.

Remove CONFIG_AS_SSSE3, which is always defined.

Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
---

 arch/x86/Makefile              | 5 ++---
 arch/x86/crypto/blake2s-core.S | 2 --
 lib/raid6/algos.c              | 2 --
 lib/raid6/recov_ssse3.c        | 6 ------
 lib/raid6/test/Makefile        | 3 ---
 5 files changed, 2 insertions(+), 16 deletions(-)

Comments

Jason A. Donenfeld March 23, 2020, 6:06 p.m. UTC | #1
On Sun, Mar 22, 2020 at 8:10 PM Masahiro Yamada <masahiroy@kernel.org> wrote:
> diff --git a/lib/raid6/algos.c b/lib/raid6/algos.c
> index bf1b4765c8f6..77457ea5a239 100644
> --- a/lib/raid6/algos.c
> +++ b/lib/raid6/algos.c
> @@ -103,9 +103,7 @@ const struct raid6_recov_calls *const raid6_recov_algos[] = {
>  #ifdef CONFIG_AS_AVX2
>         &raid6_recov_avx2,
>  #endif
> -#ifdef CONFIG_AS_SSSE3
>         &raid6_recov_ssse3,
> -#endif
>  #ifdef CONFIG_S390
>         &raid6_recov_s390xc,
>  #endif

algos.c is compiled on all platforms, so you'll need to ifdef that x86
section where SSSE3 is no longer guarding it. The pattern in the rest
of the file, if you want to follow it, is "#if defined(__x86_64__) &&
!defined(__arch_um__)". That seems ugly and like there are better
ways, but in the interest of uniformity and a lack of desire to
rewrite all the raid6 code, I went with that in this cleanup:

https://git.zx2c4.com/linux-dev/commit/?h=jd/kconfig-assembler-support&id=512a00ddebbe5294a88487dcf1dc845cf56703d9
Masahiro Yamada March 23, 2020, 8:44 p.m. UTC | #2
On Tue, Mar 24, 2020 at 3:06 AM Jason A. Donenfeld <Jason@zx2c4.com> wrote:
>
> On Sun, Mar 22, 2020 at 8:10 PM Masahiro Yamada <masahiroy@kernel.org> wrote:
> > diff --git a/lib/raid6/algos.c b/lib/raid6/algos.c
> > index bf1b4765c8f6..77457ea5a239 100644
> > --- a/lib/raid6/algos.c
> > +++ b/lib/raid6/algos.c
> > @@ -103,9 +103,7 @@ const struct raid6_recov_calls *const raid6_recov_algos[] = {
> >  #ifdef CONFIG_AS_AVX2
> >         &raid6_recov_avx2,
> >  #endif
> > -#ifdef CONFIG_AS_SSSE3
> >         &raid6_recov_ssse3,
> > -#endif
> >  #ifdef CONFIG_S390
> >         &raid6_recov_s390xc,
> >  #endif
>
> algos.c is compiled on all platforms, so you'll need to ifdef that x86
> section where SSSE3 is no longer guarding it. The pattern in the rest
> of the file, if you want to follow it, is "#if defined(__x86_64__) &&
> !defined(__arch_um__)". That seems ugly and like there are better
> ways, but in the interest of uniformity and a lack of desire to
> rewrite all the raid6 code, I went with that in this cleanup:
>
> https://git.zx2c4.com/linux-dev/commit/?h=jd/kconfig-assembler-support&id=512a00ddebbe5294a88487dcf1dc845cf56703d9


Thanks for the pointer,
but I think guarding with CONFIG_X86 makes more sense.

raid6_recov_ssse3 is defined in lib/raid6/recov_ssse3.c,
which is guarded by like this:

raid6_pq-$(CONFIG_X86) += recov_ssse3.o recov_avx2.o mmx.o sse1.o
sse2.o avx2.o avx512.o recov_avx512.o


Indeed,

 #if defined(__x86_64__) && !defined(__arch_um__)

is ugly.


I wonder why the code was written like that.

I rather want to check a single CONFIG option.
Please see the attached patch.




> --
> You received this message because you are subscribed to the Google Groups "Clang Built Linux" group.
> To unsubscribe from this group and stop receiving emails from it, send an email to clang-built-linux+unsubscribe@googlegroups.com.
> To view this discussion on the web visit https://groups.google.com/d/msgid/clang-built-linux/CAHmME9p3LAnrUMmcGPEUFqY5vOASe8MVk4%3DpzqFRj3E9C-bM%2BQ%40mail.gmail.com.
Jason A. Donenfeld March 23, 2020, 8:48 p.m. UTC | #3
On Mon, Mar 23, 2020 at 2:45 PM Masahiro Yamada <masahiroy@kernel.org> wrote:
>
> On Tue, Mar 24, 2020 at 3:06 AM Jason A. Donenfeld <Jason@zx2c4.com> wrote:
> >
> > On Sun, Mar 22, 2020 at 8:10 PM Masahiro Yamada <masahiroy@kernel.org> wrote:
> > > diff --git a/lib/raid6/algos.c b/lib/raid6/algos.c
> > > index bf1b4765c8f6..77457ea5a239 100644
> > > --- a/lib/raid6/algos.c
> > > +++ b/lib/raid6/algos.c
> > > @@ -103,9 +103,7 @@ const struct raid6_recov_calls *const raid6_recov_algos[] = {
> > >  #ifdef CONFIG_AS_AVX2
> > >         &raid6_recov_avx2,
> > >  #endif
> > > -#ifdef CONFIG_AS_SSSE3
> > >         &raid6_recov_ssse3,
> > > -#endif
> > >  #ifdef CONFIG_S390
> > >         &raid6_recov_s390xc,
> > >  #endif
> >
> > algos.c is compiled on all platforms, so you'll need to ifdef that x86
> > section where SSSE3 is no longer guarding it. The pattern in the rest
> > of the file, if you want to follow it, is "#if defined(__x86_64__) &&
> > !defined(__arch_um__)". That seems ugly and like there are better
> > ways, but in the interest of uniformity and a lack of desire to
> > rewrite all the raid6 code, I went with that in this cleanup:
> >
> > https://git.zx2c4.com/linux-dev/commit/?h=jd/kconfig-assembler-support&id=512a00ddebbe5294a88487dcf1dc845cf56703d9
>
>
> Thanks for the pointer,
> but I think guarding with CONFIG_X86 makes more sense.
>
> raid6_recov_ssse3 is defined in lib/raid6/recov_ssse3.c,
> which is guarded by like this:
>
> raid6_pq-$(CONFIG_X86) += recov_ssse3.o recov_avx2.o mmx.o sse1.o
> sse2.o avx2.o avx512.o recov_avx512.o
>
>
> Indeed,
>
>  #if defined(__x86_64__) && !defined(__arch_um__)
>
> is ugly.
>
>
> I wonder why the code was written like that.
>
> I rather want to check a single CONFIG option.
> Please see the attached patch.

Seems better indeed. Looks like you've cleaned up multiple cases.

Now if you could only tell me what is wrong with my series... "Your
series does not work correctly. I will comment why later." I've been
at the edge of my seat, Fermat's last theorem style. :)

By the way, it looks like 5.7 will be raising the minimum binutils to
2.23: https://lore.kernel.org/lkml/20200316160259.GN26126@zn.tnic/ In
light of this, I'll place another patch on top of my branch handling
that transition.

Jason
Jason A. Donenfeld March 23, 2020, 9:01 p.m. UTC | #4
On Mon, Mar 23, 2020 at 2:48 PM Jason A. Donenfeld <Jason@zx2c4.com> wrote:
> By the way, it looks like 5.7 will be raising the minimum binutils to
> 2.23: https://lore.kernel.org/lkml/20200316160259.GN26126@zn.tnic/ In
> light of this, I'll place another patch on top of my branch handling
> that transition.

That now lives at the top of the usual branch:
https://git.zx2c4.com/linux-dev/log/?h=jd/kconfig-assembler-support
diff mbox series

Patch

diff --git a/arch/x86/Makefile b/arch/x86/Makefile
index e4a062313bb0..94f89612e024 100644
--- a/arch/x86/Makefile
+++ b/arch/x86/Makefile
@@ -178,7 +178,6 @@  ifeq ($(ACCUMULATE_OUTGOING_ARGS), 1)
 endif
 
 # does binutils support specific instructions?
-asinstr += $(call as-instr,pshufb %xmm0$(comma)%xmm0,-DCONFIG_AS_SSSE3=1)
 avx_instr := $(call as-instr,vxorps %ymm0$(comma)%ymm1$(comma)%ymm2,-DCONFIG_AS_AVX=1)
 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)
@@ -186,8 +185,8 @@  sha1_ni_instr :=$(call as-instr,sha1msg1 %xmm0$(comma)%xmm1,-DCONFIG_AS_SHA1_NI=
 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 += $(asinstr) $(avx_instr) $(avx2_instr) $(avx512_instr) $(sha1_ni_instr) $(sha256_ni_instr) $(adx_instr)
-KBUILD_CFLAGS += $(asinstr) $(avx_instr) $(avx2_instr) $(avx512_instr) $(sha1_ni_instr) $(sha256_ni_instr) $(adx_instr)
+KBUILD_AFLAGS += $(avx_instr) $(avx2_instr) $(avx512_instr) $(sha1_ni_instr) $(sha256_ni_instr) $(adx_instr)
+KBUILD_CFLAGS += $(avx_instr) $(avx2_instr) $(avx512_instr) $(sha1_ni_instr) $(sha256_ni_instr) $(adx_instr)
 
 KBUILD_LDFLAGS := -m elf_$(UTS_MACHINE)
 
diff --git a/arch/x86/crypto/blake2s-core.S b/arch/x86/crypto/blake2s-core.S
index 24910b766bdd..2ca79974f819 100644
--- a/arch/x86/crypto/blake2s-core.S
+++ b/arch/x86/crypto/blake2s-core.S
@@ -46,7 +46,6 @@  SIGMA2:
 #endif /* CONFIG_AS_AVX512 */
 
 .text
-#ifdef CONFIG_AS_SSSE3
 SYM_FUNC_START(blake2s_compress_ssse3)
 	testq		%rdx,%rdx
 	je		.Lendofloop
@@ -174,7 +173,6 @@  SYM_FUNC_START(blake2s_compress_ssse3)
 .Lendofloop:
 	ret
 SYM_FUNC_END(blake2s_compress_ssse3)
-#endif /* CONFIG_AS_SSSE3 */
 
 #ifdef CONFIG_AS_AVX512
 SYM_FUNC_START(blake2s_compress_avx512)
diff --git a/lib/raid6/algos.c b/lib/raid6/algos.c
index bf1b4765c8f6..77457ea5a239 100644
--- a/lib/raid6/algos.c
+++ b/lib/raid6/algos.c
@@ -103,9 +103,7 @@  const struct raid6_recov_calls *const raid6_recov_algos[] = {
 #ifdef CONFIG_AS_AVX2
 	&raid6_recov_avx2,
 #endif
-#ifdef CONFIG_AS_SSSE3
 	&raid6_recov_ssse3,
-#endif
 #ifdef CONFIG_S390
 	&raid6_recov_s390xc,
 #endif
diff --git a/lib/raid6/recov_ssse3.c b/lib/raid6/recov_ssse3.c
index 1de97d2405d0..4bfa3c6b60de 100644
--- a/lib/raid6/recov_ssse3.c
+++ b/lib/raid6/recov_ssse3.c
@@ -3,8 +3,6 @@ 
  * Copyright (C) 2012 Intel Corporation
  */
 
-#ifdef CONFIG_AS_SSSE3
-
 #include <linux/raid/pq.h>
 #include "x86.h"
 
@@ -328,7 +326,3 @@  const struct raid6_recov_calls raid6_recov_ssse3 = {
 #endif
 	.priority = 1,
 };
-
-#else
-#warning "your version of binutils lacks SSSE3 support"
-#endif
diff --git a/lib/raid6/test/Makefile b/lib/raid6/test/Makefile
index 3ab8720aa2f8..79777645cac9 100644
--- a/lib/raid6/test/Makefile
+++ b/lib/raid6/test/Makefile
@@ -34,9 +34,6 @@  endif
 
 ifeq ($(IS_X86),yes)
         OBJS   += mmx.o sse1.o sse2.o avx2.o recov_ssse3.o recov_avx2.o avx512.o recov_avx512.o
-        CFLAGS += $(shell echo "pshufb %xmm0, %xmm0" |		\
-                    gcc -c -x assembler - >&/dev/null &&	\
-                    rm ./-.o && echo -DCONFIG_AS_SSSE3=1)
         CFLAGS += $(shell echo "vpbroadcastb %xmm0, %ymm1" |	\
                     gcc -c -x assembler - >&/dev/null &&	\
                     rm ./-.o && echo -DCONFIG_AS_AVX2=1)