Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

x86: remove always-defined CONFIG_AS_SSSE3

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.

I added ifdef CONFIG_X86 to lib/raid6/algos.c to avoid link errors
on non-x86 architectures.

lib/raid6/algos.c is built not only for the kernel but also for
testing the library code from userspace. I added -DCONFIG_X86 to
lib/raid6/test/Makefile to cator to this usecase.

Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
Reviewed-by: Jason A. Donenfeld <Jason@zx2c4.com>
Reviewed-by: Nick Desaulniers <ndesaulniers@google.com>
Acked-by: Ingo Molnar <mingo@kernel.org>

+4 -15
+2 -3
arch/x86/Makefile
··· 178 178 endif 179 179 180 180 # does binutils support specific instructions? 181 - asinstr += $(call as-instr,pshufb %xmm0$(comma)%xmm0,-DCONFIG_AS_SSSE3=1) 182 181 avx_instr := $(call as-instr,vxorps %ymm0$(comma)%ymm1$(comma)%ymm2,-DCONFIG_AS_AVX=1) 183 182 avx2_instr :=$(call as-instr,vpbroadcastb %xmm0$(comma)%ymm1,-DCONFIG_AS_AVX2=1) 184 183 avx512_instr :=$(call as-instr,vpmovm2b %k1$(comma)%zmm5,-DCONFIG_AS_AVX512=1) ··· 185 186 sha256_ni_instr :=$(call as-instr,sha256msg1 %xmm0$(comma)%xmm1,-DCONFIG_AS_SHA256_NI=1) 186 187 adx_instr := $(call as-instr,adox %r10$(comma)%r10,-DCONFIG_AS_ADX=1) 187 188 188 - KBUILD_AFLAGS += $(asinstr) $(avx_instr) $(avx2_instr) $(avx512_instr) $(sha1_ni_instr) $(sha256_ni_instr) $(adx_instr) 189 - KBUILD_CFLAGS += $(asinstr) $(avx_instr) $(avx2_instr) $(avx512_instr) $(sha1_ni_instr) $(sha256_ni_instr) $(adx_instr) 189 + KBUILD_AFLAGS += $(avx_instr) $(avx2_instr) $(avx512_instr) $(sha1_ni_instr) $(sha256_ni_instr) $(adx_instr) 190 + KBUILD_CFLAGS += $(avx_instr) $(avx2_instr) $(avx512_instr) $(sha1_ni_instr) $(sha256_ni_instr) $(adx_instr) 190 191 191 192 KBUILD_LDFLAGS := -m elf_$(UTS_MACHINE) 192 193
-2
arch/x86/crypto/blake2s-core.S
··· 46 46 #endif /* CONFIG_AS_AVX512 */ 47 47 48 48 .text 49 - #ifdef CONFIG_AS_SSSE3 50 49 SYM_FUNC_START(blake2s_compress_ssse3) 51 50 testq %rdx,%rdx 52 51 je .Lendofloop ··· 173 174 .Lendofloop: 174 175 ret 175 176 SYM_FUNC_END(blake2s_compress_ssse3) 176 - #endif /* CONFIG_AS_SSSE3 */ 177 177 178 178 #ifdef CONFIG_AS_AVX512 179 179 SYM_FUNC_START(blake2s_compress_avx512)
+1 -1
lib/raid6/algos.c
··· 97 97 EXPORT_SYMBOL_GPL(raid6_datap_recov); 98 98 99 99 const struct raid6_recov_calls *const raid6_recov_algos[] = { 100 + #ifdef CONFIG_X86 100 101 #ifdef CONFIG_AS_AVX512 101 102 &raid6_recov_avx512, 102 103 #endif 103 104 #ifdef CONFIG_AS_AVX2 104 105 &raid6_recov_avx2, 105 106 #endif 106 - #ifdef CONFIG_AS_SSSE3 107 107 &raid6_recov_ssse3, 108 108 #endif 109 109 #ifdef CONFIG_S390
-6
lib/raid6/recov_ssse3.c
··· 3 3 * Copyright (C) 2012 Intel Corporation 4 4 */ 5 5 6 - #ifdef CONFIG_AS_SSSE3 7 - 8 6 #include <linux/raid/pq.h> 9 7 #include "x86.h" 10 8 ··· 326 328 #endif 327 329 .priority = 1, 328 330 }; 329 - 330 - #else 331 - #warning "your version of binutils lacks SSSE3 support" 332 - #endif
+1 -3
lib/raid6/test/Makefile
··· 34 34 35 35 ifeq ($(IS_X86),yes) 36 36 OBJS += mmx.o sse1.o sse2.o avx2.o recov_ssse3.o recov_avx2.o avx512.o recov_avx512.o 37 - CFLAGS += $(shell echo "pshufb %xmm0, %xmm0" | \ 38 - gcc -c -x assembler - >/dev/null 2>&1 && \ 39 - rm ./-.o && echo -DCONFIG_AS_SSSE3=1) 37 + CFLAGS += -DCONFIG_X86 40 38 CFLAGS += $(shell echo "vpbroadcastb %xmm0, %ymm1" | \ 41 39 gcc -c -x assembler - >/dev/null 2>&1 && \ 42 40 rm ./-.o && echo -DCONFIG_AS_AVX2=1)