x86: remove always-defined CONFIG_AS_* options
Subsystems (2)
v2 cover x86: remove always-defined CONFIG_AS_* options
arch/x86/Makefile tests instruction code by $(call as-instr, ...)
Some of them are very old.
For example, the check for CONFIG_AS_CFI dates back to 2006.
We raise GCC versions from time to time, and we clean old code away. The same policy applied to binutils.
The current minimal supported version of binutils is 2.21
This is new enough to recognize the instruction in most of as-instr calls.
If this series looks good, how to merge it?
Via x86 tree or maybe crypto ?
Changes in v2:
- New patch
- Remove CFI_SIGNAL_FRAME entirely (per Nick)
- add ifdef CONFIG_X86 to fix build errors on non-x86 arches
Masahiro Yamada (9):
lib/raid6/test: fix build on distros whose /bin/sh is not bash
x86: remove unneeded defined(__ASSEMBLY__) check from asm/dwarf2.h
x86: remove always-defined CONFIG_AS_CFI
x86: remove unneeded (CONFIG_AS_)CFI_SIGNAL_FRAME
x86: remove always-defined CONFIG_AS_CFI_SECTIONS
x86: remove always-defined CONFIG_AS_SSSE3
x86: remove always-defined CONFIG_AS_AVX
x86: add comments about the binutils version to support code in
as-instr
x86: replace arch macros from compiler with CONFIG_X86_{32,64}
arch/x86/Makefile | 21 +++------ arch/x86/crypto/Makefile | 32 +++++--------- arch/x86/crypto/aesni-intel_avx-x86_64.S | 3 -- arch/x86/crypto/aesni-intel_glue.c | 14 +----- arch/x86/crypto/blake2s-core.S | 2 - arch/x86/crypto/poly1305-x86_64-cryptogams.pl | 8 ---- arch/x86/crypto/poly1305_glue.c | 6 +-- arch/x86/crypto/sha1_ssse3_asm.S | 4 -- arch/x86/crypto/sha1_ssse3_glue.c | 9 +--- arch/x86/crypto/sha256-avx-asm.S | 3 -- arch/x86/crypto/sha256_ssse3_glue.c | 8 +--- arch/x86/crypto/sha512-avx-asm.S | 2 - arch/x86/crypto/sha512_ssse3_glue.c | 7 +-- arch/x86/include/asm/dwarf2.h | 44 ------------------- arch/x86/include/asm/xor_avx.h | 9 ---- kernel/signal.c | 2 +- lib/raid6/algos.c | 6 +-- lib/raid6/recov_ssse3.c | 6 --- lib/raid6/test/Makefile | 8 ++-- 19 files changed, 33 insertions(+), 161 deletions(-)
Signature · 1 line
2.17.1
PATCH v2 1/9 lib/raid6/test: fix build on distros whose /bin/sh is not bash
You can test raid6 library code from user-space, like this:
$ cd lib/raid6/test $ make
The command in $(shell ...) function is evaluated by /bin/sh by default. (or, you can change the default shell by setting 'SHELL' in Makefile)
Currently '>&/dev/null' is used to sink both stdout and stderr. Because this code is bash-ism, it only works when /bin/sh is a symbolic link to bash (this is the case on RHEL etc.)
This does not work on Ubuntu where /bin/sh is a symbolic link to dash.
I see lots of
/bin/sh: 1: Syntax error: Bad fd number
and
warning "your version of binutils lacks ... support"
Replace it with portable '>/dev/null 2>&1'.
---
Changes in v2:
- New patch
lib/raid6/test/Makefile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-)
lib/raid6/test/Makefile +3 -3
@@ -35,13 +35,13 @@ 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 && \ + gcc -c -x assembler - >/dev/null 2>&1 && \ rm ./-.o && echo -DCONFIG_AS_SSSE3=1) CFLAGS += $(shell echo "vpbroadcastb %xmm0, %ymm1" | \ - gcc -c -x assembler - >&/dev/null && \ + gcc -c -x assembler - >/dev/null 2>&1 && \ rm ./-.o && echo -DCONFIG_AS_AVX2=1) CFLAGS += $(shell echo "vpmovm2b %k1, %zmm5" | \ - gcc -c -x assembler - >&/dev/null && \ + gcc -c -x assembler - >/dev/null 2>&1 && \ rm ./-.o && echo -DCONFIG_AS_AVX512=1) else ifeq ($(HAS_NEON),yes) OBJS += neon.o neon1.o neon2.o neon4.o neon8.o recov_neon.o recov_neon_inner.o
Signature · 1 line
2.17.1
Re: [PATCH v2 1/9] lib/raid6/test: fix build on distros whose /bin/sh is not bash
Quoted 18 lines · Masahiro Yamada
You can test raid6 library code from user-space, like this:
$ cd lib/raid6/test $ makeThe command in $(shell ...) function is evaluated by
/bin/shby default. (or, you can change the default shell by setting 'SHELL' inMakefile)Currently '>&/dev/null' is used to sink both stdout and stderr. Because this code is bash-ism, it only works when
/bin/shis a symbolic link to bash (this is the case on RHEL etc.)This does not work on Ubuntu where
/bin/shis a symbolic link to dash.I see lots of
/bin/sh: 1: Syntax error: Bad fd number
Quoted 8 lines
and
warning "your version of binutils lacks ... support"
Replace it with portable '>/dev/null 2>&1'.
Fixes 4f8c55c5ad49 ("lib/raid6: build proper files on corresponding arch")Signed-off-by Masahiro Yamada <[email protected]>
Quoted 30 lines
---
Changes in v2:
- New patchlib/raid6/test/Makefile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-)lib/raid6/test/Makefile +3
-3@@ -35,13 +35,13 @@ 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 && \ + gcc -c -x assembler - >/dev/null 2>&1 && \ rm ./-.o && echo -DCONFIG_AS_SSSE3=1) CFLAGS += $(shell echo "vpbroadcastb %xmm0, %ymm1" | \ - gcc -c -x assembler - >&/dev/null && \ + gcc -c -x assembler - >/dev/null 2>&1 && \ rm ./-.o && echo -DCONFIG_AS_AVX2=1) CFLAGS += $(shell echo "vpmovm2b %k1, %zmm5" | \ - gcc -c -x assembler - >&/dev/null && \ + gcc -c -x assembler - >/dev/null 2>&1 && \ rm ./-.o && echo -DCONFIG_AS_AVX512=1) else ifeq ($(HAS_NEON),yes) OBJS += neon.o neon1.o neon2.o neon4.o neon8.o recov_neon.o recov_neon_inner.o
PATCH v2 2/9 x86: remove unneeded defined(__ASSEMBLY__) check from asm/dwarf2.h
In reply to Masahiro YamadaThis header file has the following check at the top:
#ifndef __ASSEMBLY__ #warning "asm/dwarf2.h should be only included in pure assembly files" #endif
So, we expect defined(__ASSEMBLY__) is always true.
---
Changes in v2: None
arch/x86/include/asm/dwarf2.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
arch/x86/include/asm/dwarf2.h +1 -1
@@ -36,7 +36,7 @@#define CFI_SIGNAL_FRAME #endif -#if defined(CONFIG_AS_CFI_SECTIONS ) && defined(__ASSEMBLY__) +#if defined(CONFIG_AS_CFI_SECTIONS )#ifndef BUILD_VDSO /* * Emit CFI data in .debug_frame sections, not .eh_frame sections.
Signature · 1 line
2.17.1
PATCH v2 3/9 x86: remove always-defined CONFIG_AS_CFI
In reply to Masahiro YamadaCONFIG_AS_CFI was introduced by commit e2414910f212 ("[PATCH] x86:
Detect CFI support in the assembler at runtime"), and extended by commit f0f12d85af85 ("x86_64: Check for .cfi_rel_offset in CFI probe").
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_CFI, which is always defined.
---
If this series is applied,
I can hard-code the assembler code, and delete CFI_* macros entirely.
Changes in v2: None
arch/x86/Makefile | 10 ++-------- arch/x86/include/asm/dwarf2.h | 36 ----------------------------------- 2 files changed, 2 insertions(+), 44 deletions(-)
arch/x86/Makefile +2 -8
@@ -177,12 +177,6 @@ ifeq ($(ACCUMULATE_OUTGOING_ARGS), 1) KBUILD_CFLAGS += $(call cc-option,-maccumulate-outgoing-args,) endif -# Stackpointer is addressed different for 32 bit and 64 bit x86 -sp-$(CONFIG_X86_32) := esp -sp-$(CONFIG_X86_64) := rsp - -# do binutils support CFI? -cfi := $(call as-instr,.cfi_startproc\n.cfi_rel_offset $(sp-y)$(comma)0\n.cfi_endproc,-DCONFIG_AS_CFI=1) # is .cfi_signal_frame supported too? cfi-sigframe := $(call as-instr,.cfi_startproc\n.cfi_signal_frame\n.cfi_endproc,-DCONFIG_AS_CFI_SIGNAL_FRAME=1) cfi-sections := $(call as-instr,.cfi_sections .debug_frame,-DCONFIG_AS_CFI_SECTIONS=1)
@@ -196,8 +190,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 += $(cfi) $(cfi-sigframe) $(cfi-sections) $(asinstr) $(avx_instr) $(avx2_instr) $(avx512_instr) $(sha1_ni_instr) $(sha256_ni_instr) $(adx_instr) -KBUILD_CFLAGS += $(cfi) $(cfi-sigframe) $(cfi-sections) $(asinstr) $(avx_instr) $(avx2_instr) $(avx512_instr) $(sha1_ni_instr) $(sha256_ni_instr) $(adx_instr) +KBUILD_AFLAGS += $(cfi-sigframe) $(cfi-sections) $(asinstr) $(avx_instr) $(avx2_instr) $(avx512_instr) $(sha1_ni_instr) $(sha256_ni_instr) $(adx_instr) +KBUILD_CFLAGS += $(cfi-sigframe) $(cfi-sections) $(asinstr) $(avx_instr) $(avx2_instr) $(avx512_instr) $(sha1_ni_instr) $(sha256_ni_instr) $(adx_instr) KBUILD_LDFLAGS := -m elf_$(UTS_MACHINE)
arch/x86/include/asm/dwarf2.h +0 -36
@@ -6,15 +6,6 @@#warning "asm/dwarf2.h should be only included in pure assembly files"#endif -/* -* Macros for dwarf2 CFI unwind table entries. -* See "as.info" for details on these pseudo ops. Unfortunately -* they are only supported in very new binutils, so define them -* away for older version. -*/ - -#ifdef CONFIG_AS_CFI -#define CFI_STARTPROC .cfi_startproc#define CFI_ENDPROC .cfi_endproc#define CFI_DEF_CFA .cfi_def_cfa
@@ -55,31 +46,4 @@#endif #endif -#else - -/* -* Due to the structure of pre-exisiting code, don't use assembler line -* comment character # to ignore the arguments. Instead, use a dummy macro. -*/ -.macro cfi_ignore a=0, b=0, c=0, d=0 -.endm - -#define CFI_STARTPROC cfi_ignore -#define CFI_ENDPROC cfi_ignore -#define CFI_DEF_CFA cfi_ignore -#define CFI_DEF_CFA_REGISTER cfi_ignore -#define CFI_DEF_CFA_OFFSET cfi_ignore -#define CFI_ADJUST_CFA_OFFSET cfi_ignore -#define CFI_OFFSET cfi_ignore -#define CFI_REL_OFFSET cfi_ignore -#define CFI_REGISTER cfi_ignore -#define CFI_RESTORE cfi_ignore -#define CFI_REMEMBER_STATE cfi_ignore -#define CFI_RESTORE_STATE cfi_ignore -#define CFI_UNDEFINED cfi_ignore -#define CFI_ESCAPE cfi_ignore -#define CFI_SIGNAL_FRAME cfi_ignore - -#endif -#endif /* _ASM_X86_DWARF2_H */
Signature · 1 line
2.17.1
PATCH v2 4/9 x86: remove unneeded (CONFIG_AS_)CFI_SIGNAL_FRAME
In reply to Masahiro YamadaCommit 131484c8da97 ("x86/debug: Remove perpetually broken, unmaintainable dwarf annotations") removes all the users of CFI_SIGNAL_FRAME.
Remove the CFI_SIGNAL_FRAME and CONFIG_AS_CFI_SIGNAL_FRAME.
---
Changes in v2:
- Remove CFI_SIGNAL_FRAME entirely (per Nick)
arch/x86/Makefile | 6 ++---- arch/x86/include/asm/dwarf2.h | 6 ------ 2 files changed, 2 insertions(+), 10 deletions(-)
arch/x86/Makefile +2 -4
@@ -177,8 +177,6 @@ ifeq ($(ACCUMULATE_OUTGOING_ARGS), 1) KBUILD_CFLAGS += $(call cc-option,-maccumulate-outgoing-args,) endif -# is .cfi_signal_frame supported too? -cfi-sigframe := $(call as-instr,.cfi_startproc\n.cfi_signal_frame\n.cfi_endproc,-DCONFIG_AS_CFI_SIGNAL_FRAME=1) cfi-sections := $(call as-instr,.cfi_sections .debug_frame,-DCONFIG_AS_CFI_SECTIONS=1) # does binutils support specific instructions?
@@ -190,8 +188,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 += $(cfi-sigframe) $(cfi-sections) $(asinstr) $(avx_instr) $(avx2_instr) $(avx512_instr) $(sha1_ni_instr) $(sha256_ni_instr) $(adx_instr) -KBUILD_CFLAGS += $(cfi-sigframe) $(cfi-sections) $(asinstr) $(avx_instr) $(avx2_instr) $(avx512_instr) $(sha1_ni_instr) $(sha256_ni_instr) $(adx_instr) +KBUILD_AFLAGS += $(cfi-sections) $(asinstr) $(avx_instr) $(avx2_instr) $(avx512_instr) $(sha1_ni_instr) $(sha256_ni_instr) $(adx_instr) +KBUILD_CFLAGS += $(cfi-sections) $(asinstr) $(avx_instr) $(avx2_instr) $(avx512_instr) $(sha1_ni_instr) $(sha256_ni_instr) $(adx_instr) KBUILD_LDFLAGS := -m elf_$(UTS_MACHINE)
arch/x86/include/asm/dwarf2.h +0 -6
@@ -21,12 +21,6 @@#define CFI_UNDEFINED .cfi_undefined#define CFI_ESCAPE .cfi_escape -#ifdef CONFIG_AS_CFI_SIGNAL_FRAME -#define CFI_SIGNAL_FRAME .cfi_signal_frame -#else -#define CFI_SIGNAL_FRAME -#endif -#if defined(CONFIG_AS_CFI_SECTIONS )#ifndef BUILD_VDSO /*
Signature · 1 line
2.17.1
PATCH v2 5/9 x86: remove always-defined CONFIG_AS_CFI_SECTIONS
In reply to Masahiro YamadaCONFIG_AS_CFI_SECTIONS was introduced by commit 9e565292270a ("x86:
Use .cfi_sections for assembly code").
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_CFI_SECTIONS, which is always defined.
---
Changes in v2: None
arch/x86/Makefile | 6 ++---- arch/x86/include/asm/dwarf2.h | 2 -- 2 files changed, 2 insertions(+), 6 deletions(-)
arch/x86/Makefile +2 -4
@@ -177,8 +177,6 @@ ifeq ($(ACCUMULATE_OUTGOING_ARGS), 1) KBUILD_CFLAGS += $(call cc-option,-maccumulate-outgoing-args,) endif -cfi-sections := $(call as-instr,.cfi_sections .debug_frame,-DCONFIG_AS_CFI_SECTIONS=1) - # 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)
@@ -188,8 +186,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 += $(cfi-sections) $(asinstr) $(avx_instr) $(avx2_instr) $(avx512_instr) $(sha1_ni_instr) $(sha256_ni_instr) $(adx_instr) -KBUILD_CFLAGS += $(cfi-sections) $(asinstr) $(avx_instr) $(avx2_instr) $(avx512_instr) $(sha1_ni_instr) $(sha256_ni_instr) $(adx_instr) +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_LDFLAGS := -m elf_$(UTS_MACHINE)
arch/x86/include/asm/dwarf2.h +0 -2
@@ -21,7 +21,6 @@#define CFI_UNDEFINED .cfi_undefined#define CFI_ESCAPE .cfi_escape -#if defined(CONFIG_AS_CFI_SECTIONS )#ifndef BUILD_VDSO /* * Emit CFI data in .debug_frame sections, not .eh_frame sections.
@@ -38,6 +37,5 @@*/ .cfi_sections .eh_frame, .debug_frame#endif -#endif #endif /* _ASM_X86_DWARF2_H */
Signature · 1 line
2.17.1
PATCH v2 6/9 x86: remove always-defined CONFIG_AS_SSSE3
In reply to Masahiro YamadaCONFIG_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.
---
Changes in v2:
- add ifdef CONFIG_X86 to fix build errors on non-x86 arches
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 | 4 +--- 5 files changed, 4 insertions(+), 15 deletions(-)
arch/x86/Makefile +2 -3
@@ -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)
arch/x86/crypto/blake2s-core.S +0 -2
@@ -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)
lib/raid6/algos.c +1 -1
@@ -97,13 +97,13 @@ void (*raid6_datap_recov)(int, size_t, int, void **);EXPORT_SYMBOL_GPL (raid6_datap_recov);const struct raid6_recov_calls *const raid6_recov_algos[] = { +#ifdef CONFIG_X86 #ifdef CONFIG_AS_AVX512 &raid6_recov_avx512, #endif #ifdef CONFIG_AS_AVX2 &raid6_recov_avx2, #endif -#ifdef CONFIG_AS_SSSE3 &raid6_recov_ssse3, #endif #ifdef CONFIG_S390
lib/raid6/recov_ssse3.c +0 -6
@@ -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
lib/raid6/test/Makefile +1 -3
@@ -34,9 +34,7 @@ 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 2>&1 && \ - rm ./-.o && echo -DCONFIG_AS_SSSE3=1) + CFLAGS += -DCONFIG_X86 CFLAGS += $(shell echo "vpbroadcastb %xmm0, %ymm1" | \ gcc -c -x assembler - >/dev/null 2>&1 && \ rm ./-.o && echo -DCONFIG_AS_AVX2=1)
Signature · 1 line
2.17.1
PATCH v2 7/9 x86: remove always-defined CONFIG_AS_AVX
In reply to Masahiro YamadaCONFIG_AS_AVX was introduced by commit ea4d26ae24e5 ("raid5: add AVX optimized RAID5 checksumming").
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_AVX, which is always defined.
---
Changes in v2: None
arch/x86/Makefile | 5 ++- arch/x86/crypto/Makefile | 32 +++++++------------ arch/x86/crypto/aesni-intel_avx-x86_64.S | 3 -- arch/x86/crypto/aesni-intel_glue.c | 14 +------- arch/x86/crypto/poly1305-x86_64-cryptogams.pl | 8 ----- arch/x86/crypto/poly1305_glue.c | 6 ++-- arch/x86/crypto/sha1_ssse3_asm.S | 4 --- arch/x86/crypto/sha1_ssse3_glue.c | 9 +----- arch/x86/crypto/sha256-avx-asm.S | 3 -- arch/x86/crypto/sha256_ssse3_glue.c | 8 +---- arch/x86/crypto/sha512-avx-asm.S | 2 -- arch/x86/crypto/sha512_ssse3_glue.c | 7 +--- arch/x86/include/asm/xor_avx.h | 9 ------ 13 files changed, 21 insertions(+), 89 deletions(-)
arch/x86/Makefile +2 -3
@@ -178,15 +178,14 @@ ifeq ($(ACCUMULATE_OUTGOING_ARGS), 1) endif # does binutils support specific instructions? -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) 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 += $(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_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)
arch/x86/crypto/Makefile +12 -20
@@ -5,7 +5,6 @@ OBJECT_FILES_NON_STANDARD := y -avx_supported := $(call as-instr,vpxor %xmm0$(comma)%xmm0$(comma)%xmm0,yes,no) avx2_supported := $(call as-instr,vpgatherdd %ymm0$(comma)(%eax$(comma)%ymm1\ $(comma)4)$(comma)%ymm2,yes,no) avx512_supported :=$(call as-instr,vpmovm2b %k1$(comma)%zmm5,yes,no)
@@ -47,15 +46,12 @@ ifeq ($(adx_supported),yes) endif # These modules require assembler to support AVX. -ifeq ($(avx_supported),yes) - obj-$(CONFIG_CRYPTO_CAMELLIA_AESNI_AVX_X86_64) += \ - camellia-aesni-avx-x86_64.o - obj-$(CONFIG_CRYPTO_CAST5_AVX_X86_64) += cast5-avx-x86_64.o - obj-$(CONFIG_CRYPTO_CAST6_AVX_X86_64) += cast6-avx-x86_64.o - obj-$(CONFIG_CRYPTO_TWOFISH_AVX_X86_64) += twofish-avx-x86_64.o - obj-$(CONFIG_CRYPTO_SERPENT_AVX_X86_64) += serpent-avx-x86_64.o - obj-$(CONFIG_CRYPTO_BLAKE2S_X86) += blake2s-x86_64.o -endif +obj-$(CONFIG_CRYPTO_CAMELLIA_AESNI_AVX_X86_64) += camellia-aesni-avx-x86_64.o +obj-$(CONFIG_CRYPTO_CAST5_AVX_X86_64) += cast5-avx-x86_64.o +obj-$(CONFIG_CRYPTO_CAST6_AVX_X86_64) += cast6-avx-x86_64.o +obj-$(CONFIG_CRYPTO_TWOFISH_AVX_X86_64) += twofish-avx-x86_64.o +obj-$(CONFIG_CRYPTO_SERPENT_AVX_X86_64) += serpent-avx-x86_64.o +obj-$(CONFIG_CRYPTO_BLAKE2S_X86) += blake2s-x86_64.o # These modules require assembler to support AVX2. ifeq ($(avx2_supported),yes)
@@ -83,16 +79,12 @@ ifneq ($(CONFIG_CRYPTO_POLY1305_X86_64),) targets += poly1305-x86_64-cryptogams.S endif -ifeq ($(avx_supported),yes) - camellia-aesni-avx-x86_64-y := camellia-aesni-avx-asm_64.o \ - camellia_aesni_avx_glue.o - cast5-avx-x86_64-y := cast5-avx-x86_64-asm_64.o cast5_avx_glue.o - cast6-avx-x86_64-y := cast6-avx-x86_64-asm_64.o cast6_avx_glue.o - twofish-avx-x86_64-y := twofish-avx-x86_64-asm_64.o \ - twofish_avx_glue.o - serpent-avx-x86_64-y := serpent-avx-x86_64-asm_64.o \ - serpent_avx_glue.o -endif +camellia-aesni-avx-x86_64-y := camellia-aesni-avx-asm_64.o \ + camellia_aesni_avx_glue.o +cast5-avx-x86_64-y := cast5-avx-x86_64-asm_64.o cast5_avx_glue.o +cast6-avx-x86_64-y := cast6-avx-x86_64-asm_64.o cast6_avx_glue.o +twofish-avx-x86_64-y := twofish-avx-x86_64-asm_64.o twofish_avx_glue.o +serpent-avx-x86_64-y := serpent-avx-x86_64-asm_64.o serpent_avx_glue.o ifeq ($(avx2_supported),yes) camellia-aesni-avx2-y := camellia-aesni-avx2-asm_64.o camellia_aesni_avx2_glue.o
arch/x86/crypto/aesni-intel_avx-x86_64.S +0 -3
@@ -886,7 +886,6 @@ _less_than_8_bytes_left_\@: _partial_block_done_\@: .endm # PARTIAL_BLOCK -#ifdef CONFIG_AS_AVX ############################################################################### # GHASH_MUL MACRO to implement: Data*HashKey mod (128,127,126,121,0) # Input: A and B (128-bits each, bit-reflected)
@@ -1869,8 +1868,6 @@ key_256_finalize: ret SYM_FUNC_END(aesni_gcm_finalize_avx_gen2) -#endif /* CONFIG_AS_AVX */ - #ifdef CONFIG_AS_AVX2 ############################################################################### # GHASH_MUL MACRO to implement: Data*HashKey mod (128,127,126,121,0)
arch/x86/crypto/aesni-intel_glue.c +1 -13
@@ -185,7 +185,6 @@ static const struct aesni_gcm_tfm_s aesni_gcm_tfm_sse = { .finalize = &aesni_gcm_finalize, }; -#ifdef CONFIG_AS_AVX asmlinkage void aes_ctr_enc_128_avx_by8(const u8 *in, u8 *iv,void *keys,u8 *out,unsigned int num_bytes); asmlinkage void aes_ctr_enc_192_avx_by8(const u8 *in, u8 *iv,
@@ -234,8 +233,6 @@ static const struct aesni_gcm_tfm_s aesni_gcm_tfm_avx_gen2 = { .finalize = &aesni_gcm_finalize_avx_gen2, }; -#endif -#ifdef CONFIG_AS_AVX2 /* * asmlinkage void aesni_gcm_init_avx_gen4()
@@ -476,7 +473,6 @@ static void ctr_crypt_final(struct crypto_aes_ctx *ctx,crypto_inc (ctrblk,AES_BLOCK_SIZE ); } -#ifdef CONFIG_AS_AVX static void aesni_ctr_enc_avx_tfm (struct crypto_aes_ctx *ctx,u8 *out,const u8 *in,unsigned int len,u8 *iv) {
@@ -493,7 +489,6 @@ static void aesni_ctr_enc_avx_tfm(struct crypto_aes_ctx *ctx, u8 *out,else aes_ctr_enc_256_avx_by8 (in, iv, (void *)ctx, out, len); } -#endif static int ctr_crypt (struct skcipher_request *req) {
@@ -715,10 +710,8 @@ static int gcmaes_crypt_by_sg(bool enc, struct aead_request *req,if (left <AVX_GEN4_OPTSIZE && gcm_tfm == &aesni_gcm_tfm_avx_gen4) gcm_tfm = &aesni_gcm_tfm_avx_gen2;#endif -#ifdef CONFIG_AS_AVX if (left <AVX_GEN2_OPTSIZE && gcm_tfm == &aesni_gcm_tfm_avx_gen2) gcm_tfm = &aesni_gcm_tfm_sse; -#endif /* Linearize assoc, if not already linear */ if (req->src->length >= assoclen && req->src->length &&
@@ -1082,24 +1075,19 @@ static int __init aesni_init(void) aesni_gcm_tfm = &aesni_gcm_tfm_avx_gen4; } else#endif -#ifdef CONFIG_AS_AVX if (boot_cpu_has (X86_FEATURE_AVX )) {pr_info ("AVX version of gcm_enc/dec engaged.\n" ); aesni_gcm_tfm = &aesni_gcm_tfm_avx_gen2; - } else -#endif - { + }else {pr_info ("SSE version of gcm_enc/dec engaged.\n" ); aesni_gcm_tfm = &aesni_gcm_tfm_sse; } aesni_ctr_enc_tfm = aesni_ctr_enc; -#ifdef CONFIG_AS_AVX if (boot_cpu_has (X86_FEATURE_AVX )) {/* optimize performance of ctr mode encryption transform */ aesni_ctr_enc_tfm = aesni_ctr_enc_avx_tfm;pr_info ("AES CTR mode by8 optimization enabled\n" ); } -#endif #endif err =crypto_register_alg (&aesni_cipher_alg);
arch/x86/crypto/poly1305-x86_64-cryptogams.pl +0 -8
@@ -404,10 +404,6 @@ ___ &end_function("poly1305_emit_x86_64"); if ($avx) { -if($kernel) { - $code .= "#ifdef CONFIG_AS_AVX\n"; -} - ######################################################################## # Layout of opaque area is following. #
@@ -1516,10 +1512,6 @@ $code.=<<___; ___ &end_function("poly1305_emit_avx"); -if ($kernel) { - $code .= "#endif\n"; -} - if ($avx>1) { if ($kernel) {
arch/x86/crypto/poly1305_glue.c +3 -3
@@ -94,7 +94,7 @@ static void poly1305_simd_blocks(void *ctx, const u8 *inp, size_t len,BUILD_BUG_ON (PAGE_SIZE <POLY1305_BLOCK_SIZE ||PAGE_SIZE %POLY1305_BLOCK_SIZE ); -if (!IS_ENABLED (CONFIG_AS_AVX ) || !static_branch_likely (&poly1305_use_avx) || +if (!static_branch_likely (&poly1305_use_avx) || (len < (POLY1305_BLOCK_SIZE *18 ) && !state->is_base2_26) || !crypto_simd_usable ()) {convert_to_base2_64 (ctx);
@@ -123,7 +123,7 @@ static void poly1305_simd_blocks(void *ctx, const u8 *inp, size_t len,static void poly1305_simd_emit (void *ctx,u8 mac[POLY1305_DIGEST_SIZE ],const u32 nonce[4 ]) { -if (!IS_ENABLED (CONFIG_AS_AVX ) || !static_branch_likely (&poly1305_use_avx)) +if (!static_branch_likely (&poly1305_use_avx))poly1305_emit_x86_64 (ctx, mac, nonce);else poly1305_emit_avx (ctx, mac, nonce);
@@ -261,7 +261,7 @@ static struct shash_alg alg = {static int __init poly1305_simd_mod_init (void ) { -if (IS_ENABLED (CONFIG_AS_AVX ) &&boot_cpu_has (X86_FEATURE_AVX ) && +if (boot_cpu_has (X86_FEATURE_AVX ) &&cpu_has_xfeatures (XFEATURE_MASK_SSE |XFEATURE_MASK_YMM ,NULL ))static_branch_enable (&poly1305_use_avx); if (IS_ENABLED(CONFIG_AS_AVX2) && boot_cpu_has(X86_FEATURE_AVX) &&
arch/x86/crypto/sha1_ssse3_asm.S +0 -4
@@ -467,8 +467,6 @@ W_PRECALC_SSSE3 */ SHA1_VECTOR_ASM sha1_transform_ssse3 -#ifdef CONFIG_AS_AVX - .macro W_PRECALC_AVX .purgem W_PRECALC_00_15
@@ -553,5 +551,3 @@ W_PRECALC_AVX * const u8 *data, int blocks); */ SHA1_VECTOR_ASM sha1_transform_avx - -#endif
arch/x86/crypto/sha1_ssse3_glue.c +1 -8
@@ -114,7 +114,6 @@ static void unregister_sha1_ssse3(void)crypto_unregister_shash (&sha1_ssse3_alg); } -#ifdef CONFIG_AS_AVX asmlinkage void sha1_transform_avx(struct sha1_state *state,const u8 *data,int blocks);
@@ -175,13 +174,7 @@ static void unregister_sha1_avx(void)crypto_unregister_shash (&sha1_avx_alg); } -#else /* CONFIG_AS_AVX */ -static inline int register_sha1_avx (void ) {return 0 ; } -static inline void unregister_sha1_avx (void ) { } -#endif /* CONFIG_AS_AVX */ - - -#if defined(CONFIG_AS_AVX2 ) && (CONFIG_AS_AVX ) +#if defined(CONFIG_AS_AVX2 )#define SHA1_AVX2_BLOCK_OPTSIZE 4/* optimal 4*64 bytes of SHA1 blocks */ asmlinkage void sha1_transform_avx2(struct sha1_state *state,
arch/x86/crypto/sha256-avx-asm.S +0 -3
@@ -47,7 +47,6 @@ # This code schedules 1 block at a time, with 4 lanes per block ######################################################################## -#ifdef CONFIG_AS_AVX #include <linux/linkage.h> ## assume buffers not aligned
@@ -498,5 +497,3 @@ _SHUF_00BA: # shuffle xDxC -> DC00 _SHUF_DC00: .octa 0x0b0a090803020100FFFFFFFFFFFFFFFF - -#endif
arch/x86/crypto/sha256_ssse3_glue.c +1 -7
@@ -144,7 +144,6 @@ static void unregister_sha256_ssse3(void) ARRAY_SIZE(sha256_ssse3_algs)); } -#ifdef CONFIG_AS_AVX asmlinkage void sha256_transform_avx(struct sha256_state *state,const u8 *data,int blocks);
@@ -221,12 +220,7 @@ static void unregister_sha256_avx(void) ARRAY_SIZE(sha256_avx_algs)); } -#else -static inline int register_sha256_avx (void ) {return 0 ; } -static inline void unregister_sha256_avx (void ) { } -#endif - -#if defined(CONFIG_AS_AVX2 ) && defined(CONFIG_AS_AVX ) +#if defined(CONFIG_AS_AVX2 ) asmlinkage void sha256_transform_rorx(struct sha256_state *state,const u8 *data,int blocks);
arch/x86/crypto/sha512-avx-asm.S +0 -2
@@ -47,7 +47,6 @@ # ######################################################################## -#ifdef CONFIG_AS_AVX #include <linux/linkage.h> .text
@@ -424,4 +423,3 @@ K512: .quad 0x3c9ebe0a15c9bebc,0x431d67c49c100d4c .quad 0x4cc5d4becb3e42b6,0x597f299cfc657e2a .quad 0x5fcb6fab3ad6faec,0x6c44198c4a475817 -#endif
arch/x86/crypto/sha512_ssse3_glue.c +1 -6
@@ -142,7 +142,6 @@ static void unregister_sha512_ssse3(void) ARRAY_SIZE(sha512_ssse3_algs)); } -#ifdef CONFIG_AS_AVX asmlinkage void sha512_transform_avx(struct sha512_state *state,const u8 *data,int blocks);static bool avx_usable (void )
@@ -218,12 +217,8 @@ static void unregister_sha512_avx(void)crypto_unregister_shashes (sha512_avx_algs,ARRAY_SIZE (sha512_avx_algs)); } -#else -static inline int register_sha512_avx (void ) {return 0 ; } -static inline void unregister_sha512_avx (void ) { } -#endif -#if defined(CONFIG_AS_AVX2 ) && defined(CONFIG_AS_AVX ) +#if defined(CONFIG_AS_AVX2 ) asmlinkage void sha512_transform_rorx(struct sha512_state *state,const u8 *data,int blocks);
arch/x86/include/asm/xor_avx.h +0 -9
@@ -11,8 +11,6 @@* Based on Ingo Molnar and Zach Brown's respective MMX and SSE routines */ -#ifdef CONFIG_AS_AVX -#include <linux/compiler.h> #include <asm/fpu/api.h>
@@ -170,11 +168,4 @@ do { \#define AVX_SELECT (FASTEST ) \ (boot_cpu_has(X86_FEATURE_AVX) && boot_cpu_has(X86_FEATURE_OSXSAVE) ? &xor_block_avx : FASTEST) -#else - -#define AVX_XOR_SPEED {} - -#define AVX_SELECT (FASTEST ) (FASTEST) - -#endif #endif
Signature · 1 line
2.17.1
PATCH v2 8/9 x86: add comments about the binutils version to support code in as-instr
In reply to Masahiro YamadaWe 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").
We need to keep these as-instr checks because binutils 2.21 does not support them.
I hope this will be a good hint which one can be dropped when we bump the minimal binutils version next time.
As for the Clang/LLVM builds, we require very new LLVM version, so the LLVM integrated assembler supports all of them.
---
Changes in v2: None
arch/x86/Makefile | 5 +++++ 1 file changed, 5 insertions(+)
arch/x86/Makefile +5 -0
@@ -178,10 +178,15 @@ ifeq ($(ACCUMULATE_OUTGOING_ARGS), 1) endif # does binutils support specific instructions? +# binutils >= 2.22 avx2_instr :=$(call as-instr,vpbroadcastb %xmm0$(comma)%ymm1,-DCONFIG_AS_AVX2=1) +# binutils >= 2.25 avx512_instr :=$(call as-instr,vpmovm2b %k1$(comma)%zmm5,-DCONFIG_AS_AVX512=1) +# binutils >= 2.24 sha1_ni_instr :=$(call as-instr,sha1msg1 %xmm0$(comma)%xmm1,-DCONFIG_AS_SHA1_NI=1) +# binutils >= 2.24 sha256_ni_instr :=$(call as-instr,sha256msg1 %xmm0$(comma)%xmm1,-DCONFIG_AS_SHA256_NI=1) +# binutils >= 2.23 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)
Signature · 1 line
2.17.1
PATCH v2 9/9 x86: replace arch macros from compiler with CONFIG_X86_{32,64}
In reply to Masahiro YamadaIf the intention is to check i386/x86_64 excluding UML, checking CONFIG_X86_{32,64} is simpler.
The reason for checking __i386__ / __x86_64__ was perhaps because lib/raid6/algos.c is built not only for the kernel but also for testing the library code from userspace.
However, lib/raid6/test/Makefile passes -DCONFIG_X86_{32,64} for this case. So, I do not see a reason to not use CONFIG option here.
---
Changes in v2: None
kernel/signal.c | 2 +- lib/raid6/algos.c | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-)
kernel/signal.c +1 -1
@@ -1246,7 +1246,7 @@ static void print_fatal_signal(int signr)struct pt_regs *regs =signal_pt_regs ();pr_info ("potentially unexpected fatal signal %d.\n" , signr); -#if defined(__i386__) && !defined(__arch_um__) +#ifdef CONFIG_X86_32 pr_info ("code at %08lx: " , regs->ip); {int i;
lib/raid6/algos.c +2 -2
@@ -29,7 +29,7 @@ struct raid6_calls raid6_call;EXPORT_SYMBOL_GPL (raid6_call); const struct raid6_calls * const raid6_algos[] = { -#if defined(__i386__) && !defined(__arch_um__) +#ifdef CONFIG_X86_32 #ifdef CONFIG_AS_AVX512 &raid6_avx512x2, &raid6_avx512x1,
@@ -45,7 +45,7 @@ const struct raid6_calls * const raid6_algos[] = { &raid6_mmxx2, &raid6_mmxx1,#endif -#if defined(__x86_64__) && !defined(__arch_um__) +#ifdef CONFIG_X86_64 #ifdef CONFIG_AS_AVX512 &raid6_avx512x4, &raid6_avx512x2,
Signature · 1 line
2.17.1
Re: [PATCH v2 9/9] x86: replace arch macros from compiler with CONFIG_X86_{32,64}
Quoted 11 lines · Masahiro Yamada
If the intention is to check i386/x86_64 excluding UML, checking CONFIG_X86_{32,64} is simpler.
The reason for checking
__i386__/__x86_64__was perhaps becauselib/raid6/algos.cis built not only for the kernel but also for testing the library code from userspace.However,
lib/raid6/test/Makefilepasses -DCONFIG_X86_{32,64} for this case. So, I do not see a reason to not use CONFIG option here.Signed-off-by Masahiro Yamada <[email protected]>
Quoted 10 lines · Masahiro Yamada
arch/x86/Makefiletests instruction code by $(call as-instr, ...)Some of them are very old.
For example, the check forCONFIG_AS_CFIdates back to 2006.We raise GCC versions from time to time, and we clean old code away. The same policy applied to binutils.
Quoted 7 lines
The current minimal supported version of binutils is 2.21
This is new enough to recognize the instruction in most of as-instr calls.
If this series looks good, how to merge it?
Via x86 tree or maybe crypto ?
This series looks fine, but why is it still incomplete? That is, it's missing your drm commit plus the 4 I layered on top for moving to a Kconfig-based approach and accounting for the bump to binutils 2.23. Everything is now rebased here:
https://git.zx2c4.com/linux-dev/log/?h=jd/kconfig-assembler-support
Would you be up for resubmitting those all together so we can handle this in one go?
Jason
Quoted 20 lines · Jason A. Donenfeld
Quoted 10 lines · Masahiro Yamada
arch/x86/Makefiletests instruction code by $(call as-instr, ...)Some of them are very old.
For example, the check forCONFIG_AS_CFIdates back to 2006.We raise GCC versions from time to time, and we clean old code away. The same policy applied to binutils.
Quoted 7 lines
The current minimal supported version of binutils is 2.21
This is new enough to recognize the instruction in most of as-instr calls.
If this series looks good, how to merge it?
Via x86 tree or maybe crypto ?
Quoted 8 lines
This series looks fine, but why is it still incomplete? That is, it's missing your drm commit plus the 4 I layered on top for moving to a Kconfig-based approach and accounting for the bump to binutils 2.23. Everything is now rebased here:
https://git.zx2c4.com/linux-dev/log/?h=jd/kconfig-assembler-supportWould you be up for resubmitting those all together so we can handle this in one go?
The drm one was independent of the others, so I just sent it to drm ML separately.
As for your 4, I just thought you would send a fixed version.
But, folding everything in a series will clarify the patch dependency.
OK, I will do it.
Who/which ML should I send it to?
--
Best Regards
Masahiro Yamada
Quoted 7 lines · Masahiro Yamada
The drm one was independent of the others, so I just sent it to drm ML separately. As for your 4, I just thought you would send a fixed version.
But, folding everything in a series will clarify the patch dependency.
OK, I will do it.
Great, thanks. The ones in that branch now are ready to go, so grab them out of there.
Quoted 1 line
Who/which ML should I send it to?
This seems to make sense, IMHO, for x86 or just as a pull to Linus (i.e. the "kbuild mailing list", in which case, you'd send a pull from your tree).
Jason