aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/x86/crypto/serpent_avx2_glue.c15
1 files changed, 4 insertions, 11 deletions
diff --git a/arch/x86/crypto/serpent_avx2_glue.c b/arch/x86/crypto/serpent_avx2_glue.c
index aa325fa5c7a6..f226ad41fde1 100644
--- a/arch/x86/crypto/serpent_avx2_glue.c
+++ b/arch/x86/crypto/serpent_avx2_glue.c
@@ -20,8 +20,7 @@
20#include <crypto/lrw.h> 20#include <crypto/lrw.h>
21#include <crypto/xts.h> 21#include <crypto/xts.h>
22#include <crypto/serpent.h> 22#include <crypto/serpent.h>
23#include <asm/xcr.h> 23#include <asm/fpu/api.h>
24#include <asm/fpu/xstate.h>
25#include <asm/crypto/serpent-avx.h> 24#include <asm/crypto/serpent-avx.h>
26#include <asm/crypto/glue_helper.h> 25#include <asm/crypto/glue_helper.h>
27 26
@@ -537,16 +536,10 @@ static struct crypto_alg srp_algs[10] = { {
537 536
538static int __init init(void) 537static int __init init(void)
539{ 538{
540 u64 xcr0; 539 const char *feature_name;
541 540
542 if (!cpu_has_avx2 || !cpu_has_osxsave) { 541 if (!cpu_has_xfeatures(XSTATE_SSE | XSTATE_YMM, &feature_name)) {
543 pr_info("AVX2 instructions are not detected.\n"); 542 pr_info("CPU feature '%s' is not supported.\n", feature_name);
544 return -ENODEV;
545 }
546
547 xcr0 = xgetbv(XCR_XFEATURE_ENABLED_MASK);
548 if ((xcr0 & (XSTATE_SSE | XSTATE_YMM)) != (XSTATE_SSE | XSTATE_YMM)) {
549 pr_info("AVX detected but unusable.\n");
550 return -ENODEV; 543 return -ENODEV;
551 } 544 }
552 545