Commit 1eb468b3 authored by Taehee Yoo's avatar Taehee Yoo Committed by Herbert Xu

crypto: x86/aria-avx2 - fix build failure with old binutils

The minimum version of binutils for kernel build is currently 2.23 and
it doesn't support GFNI.
So, it fails to build the aria-avx2 if the old binutils is used.
The code using GFNI is an optional part of aria-avx2.
So, it disables GFNI part in it when the old binutils is used.

Fixes: 37d8d3ae ("crypto: x86/aria - implement aria-avx2")
Reported-by: default avatarJan Beulich <jbeulich@suse.com>
Signed-off-by: default avatarTaehee Yoo <ap420073@gmail.com>
Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
parent e3cf2f87
...@@ -302,6 +302,7 @@ ...@@ -302,6 +302,7 @@
vpbroadcastb ((round * 16) + idx + 4)(rk), t0; \ vpbroadcastb ((round * 16) + idx + 4)(rk), t0; \
vpxor t0, x7, x7; vpxor t0, x7, x7;
#ifdef CONFIG_AS_GFNI
#define aria_sbox_8way_gfni(x0, x1, x2, x3, \ #define aria_sbox_8way_gfni(x0, x1, x2, x3, \
x4, x5, x6, x7, \ x4, x5, x6, x7, \
t0, t1, t2, t3, \ t0, t1, t2, t3, \
...@@ -324,6 +325,7 @@ ...@@ -324,6 +325,7 @@
vgf2p8affineinvqb $0, t2, x3, x3; \ vgf2p8affineinvqb $0, t2, x3, x3; \
vgf2p8affineinvqb $0, t2, x7, x7 vgf2p8affineinvqb $0, t2, x7, x7
#endif /* CONFIG_AS_GFNI */
#define aria_sbox_8way(x0, x1, x2, x3, \ #define aria_sbox_8way(x0, x1, x2, x3, \
x4, x5, x6, x7, \ x4, x5, x6, x7, \
t0, t1, t2, t3, \ t0, t1, t2, t3, \
...@@ -596,7 +598,7 @@ ...@@ -596,7 +598,7 @@
aria_load_state_8way(y0, y1, y2, y3, \ aria_load_state_8way(y0, y1, y2, y3, \
y4, y5, y6, y7, \ y4, y5, y6, y7, \
mem_tmp, 8); mem_tmp, 8);
#ifdef CONFIG_AS_GFNI
#define aria_fe_gfni(x0, x1, x2, x3, \ #define aria_fe_gfni(x0, x1, x2, x3, \
x4, x5, x6, x7, \ x4, x5, x6, x7, \
y0, y1, y2, y3, \ y0, y1, y2, y3, \
...@@ -750,6 +752,7 @@ ...@@ -750,6 +752,7 @@
aria_load_state_8way(y0, y1, y2, y3, \ aria_load_state_8way(y0, y1, y2, y3, \
y4, y5, y6, y7, \ y4, y5, y6, y7, \
mem_tmp, 8); mem_tmp, 8);
#endif /* CONFIG_AS_GFNI */
.section .rodata.cst32.shufb_16x16b, "aM", @progbits, 32 .section .rodata.cst32.shufb_16x16b, "aM", @progbits, 32
.align 32 .align 32
...@@ -803,6 +806,7 @@ ...@@ -803,6 +806,7 @@
.Ltf_hi__x2__and__fwd_aff: .Ltf_hi__x2__and__fwd_aff:
.octa 0x3F893781E95FE1576CDA64D2BA0CB204 .octa 0x3F893781E95FE1576CDA64D2BA0CB204
#ifdef CONFIG_AS_GFNI
.section .rodata.cst8, "aM", @progbits, 8 .section .rodata.cst8, "aM", @progbits, 8
.align 8 .align 8
/* AES affine: */ /* AES affine: */
...@@ -864,6 +868,8 @@ ...@@ -864,6 +868,8 @@
BV8(0, 0, 0, 0, 0, 0, 1, 0), BV8(0, 0, 0, 0, 0, 0, 1, 0),
BV8(0, 0, 0, 0, 0, 0, 0, 1)) BV8(0, 0, 0, 0, 0, 0, 0, 1))
#endif /* CONFIG_AS_GFNI */
/* 4-bit mask */ /* 4-bit mask */
.section .rodata.cst4.L0f0f0f0f, "aM", @progbits, 4 .section .rodata.cst4.L0f0f0f0f, "aM", @progbits, 4
.align 4 .align 4
...@@ -1213,6 +1219,7 @@ SYM_TYPED_FUNC_START(aria_aesni_avx2_ctr_crypt_32way) ...@@ -1213,6 +1219,7 @@ SYM_TYPED_FUNC_START(aria_aesni_avx2_ctr_crypt_32way)
RET; RET;
SYM_FUNC_END(aria_aesni_avx2_ctr_crypt_32way) SYM_FUNC_END(aria_aesni_avx2_ctr_crypt_32way)
#ifdef CONFIG_AS_GFNI
SYM_FUNC_START_LOCAL(__aria_aesni_avx2_gfni_crypt_32way) SYM_FUNC_START_LOCAL(__aria_aesni_avx2_gfni_crypt_32way)
/* input: /* input:
* %r9: rk * %r9: rk
...@@ -1431,3 +1438,4 @@ SYM_TYPED_FUNC_START(aria_aesni_avx2_gfni_ctr_crypt_32way) ...@@ -1431,3 +1438,4 @@ SYM_TYPED_FUNC_START(aria_aesni_avx2_gfni_ctr_crypt_32way)
FRAME_END FRAME_END
RET; RET;
SYM_FUNC_END(aria_aesni_avx2_gfni_ctr_crypt_32way) SYM_FUNC_END(aria_aesni_avx2_gfni_ctr_crypt_32way)
#endif /* CONFIG_AS_GFNI */
...@@ -26,6 +26,7 @@ asmlinkage void aria_aesni_avx2_ctr_crypt_32way(const void *ctx, u8 *dst, ...@@ -26,6 +26,7 @@ asmlinkage void aria_aesni_avx2_ctr_crypt_32way(const void *ctx, u8 *dst,
const u8 *src, const u8 *src,
u8 *keystream, u8 *iv); u8 *keystream, u8 *iv);
EXPORT_SYMBOL_GPL(aria_aesni_avx2_ctr_crypt_32way); EXPORT_SYMBOL_GPL(aria_aesni_avx2_ctr_crypt_32way);
#ifdef CONFIG_AS_GFNI
asmlinkage void aria_aesni_avx2_gfni_encrypt_32way(const void *ctx, u8 *dst, asmlinkage void aria_aesni_avx2_gfni_encrypt_32way(const void *ctx, u8 *dst,
const u8 *src); const u8 *src);
EXPORT_SYMBOL_GPL(aria_aesni_avx2_gfni_encrypt_32way); EXPORT_SYMBOL_GPL(aria_aesni_avx2_gfni_encrypt_32way);
...@@ -36,6 +37,7 @@ asmlinkage void aria_aesni_avx2_gfni_ctr_crypt_32way(const void *ctx, u8 *dst, ...@@ -36,6 +37,7 @@ asmlinkage void aria_aesni_avx2_gfni_ctr_crypt_32way(const void *ctx, u8 *dst,
const u8 *src, const u8 *src,
u8 *keystream, u8 *iv); u8 *keystream, u8 *iv);
EXPORT_SYMBOL_GPL(aria_aesni_avx2_gfni_ctr_crypt_32way); EXPORT_SYMBOL_GPL(aria_aesni_avx2_gfni_ctr_crypt_32way);
#endif /* CONFIG_AS_GFNI */
static struct aria_avx_ops aria_ops; static struct aria_avx_ops aria_ops;
...@@ -215,7 +217,7 @@ static int __init aria_avx2_init(void) ...@@ -215,7 +217,7 @@ static int __init aria_avx2_init(void)
return -ENODEV; return -ENODEV;
} }
if (boot_cpu_has(X86_FEATURE_GFNI)) { if (boot_cpu_has(X86_FEATURE_GFNI) && IS_ENABLED(CONFIG_AS_GFNI)) {
aria_ops.aria_encrypt_16way = aria_aesni_avx_gfni_encrypt_16way; aria_ops.aria_encrypt_16way = aria_aesni_avx_gfni_encrypt_16way;
aria_ops.aria_decrypt_16way = aria_aesni_avx_gfni_decrypt_16way; aria_ops.aria_decrypt_16way = aria_aesni_avx_gfni_decrypt_16way;
aria_ops.aria_ctr_crypt_16way = aria_aesni_avx_gfni_ctr_crypt_16way; aria_ops.aria_ctr_crypt_16way = aria_aesni_avx_gfni_ctr_crypt_16way;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment