crypto: x86/aegis - stop using the SIMD helper
authorEric Biggers <ebiggers@google.com>
Wed, 2 Apr 2025 00:24:02 +0000 (17:24 -0700)
committerHerbert Xu <herbert@gondor.apana.org.au>
Mon, 7 Apr 2025 05:22:27 +0000 (13:22 +0800)
Stop wrapping skcipher and aead algorithms with the crypto SIMD helper
(crypto/simd.c).  The only purpose of doing so was to work around x86
not always supporting kernel-mode FPU in softirqs.  Specifically, if a
hardirq interrupted a task context kernel-mode FPU section and then a
softirqs were run at the end of that hardirq, those softirqs could not
use kernel-mode FPU.  This has now been fixed.  In combination with the
fact that the skcipher and aead APIs only support task and softirq
contexts, these can now just use kernel-mode FPU unconditionally on x86.

This simplifies the code and improves performance.

Signed-off-by: Eric Biggers <ebiggers@google.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
arch/x86/crypto/Kconfig
arch/x86/crypto/aegis128-aesni-glue.c

index 3d948f10c94cd77fcd5b207670054c6dc676afbe..c15400efac075575cb2d371edba93780c72301d0 100644 (file)
@@ -369,7 +369,6 @@ config CRYPTO_AEGIS128_AESNI_SSE2
        tristate "AEAD ciphers: AEGIS-128 (AES-NI/SSE4.1)"
        depends on X86 && 64BIT
        select CRYPTO_AEAD
-       select CRYPTO_SIMD
        help
          AEGIS-128 AEAD algorithm
 
index 26786e15abacf60837c23eab09a668115831b970..f1b6d40154e3528ee5bad6167d872ea37a398694 100644 (file)
@@ -8,7 +8,6 @@
  */
 
 #include <crypto/internal/aead.h>
-#include <crypto/internal/simd.h>
 #include <crypto/internal/skcipher.h>
 #include <crypto/scatterwalk.h>
 #include <linux/module.h>
@@ -233,21 +232,18 @@ static struct aead_alg crypto_aegis128_aesni_alg = {
        .chunksize = AEGIS128_BLOCK_SIZE,
 
        .base = {
-               .cra_flags = CRYPTO_ALG_INTERNAL,
                .cra_blocksize = 1,
                .cra_ctxsize = sizeof(struct aegis_ctx) +
                               __alignof__(struct aegis_ctx),
                .cra_priority = 400,
 
-               .cra_name = "__aegis128",
-               .cra_driver_name = "__aegis128-aesni",
+               .cra_name = "aegis128",
+               .cra_driver_name = "aegis128-aesni",
 
                .cra_module = THIS_MODULE,
        }
 };
 
-static struct simd_aead_alg *simd_alg;
-
 static int __init crypto_aegis128_aesni_module_init(void)
 {
        if (!boot_cpu_has(X86_FEATURE_XMM4_1) ||
@@ -255,13 +251,12 @@ static int __init crypto_aegis128_aesni_module_init(void)
            !cpu_has_xfeatures(XFEATURE_MASK_SSE, NULL))
                return -ENODEV;
 
-       return simd_register_aeads_compat(&crypto_aegis128_aesni_alg, 1,
-                                         &simd_alg);
+       return crypto_register_aead(&crypto_aegis128_aesni_alg);
 }
 
 static void __exit crypto_aegis128_aesni_module_exit(void)
 {
-       simd_unregister_aeads(&crypto_aegis128_aesni_alg, 1, &simd_alg);
+       crypto_unregister_aead(&crypto_aegis128_aesni_alg);
 }
 
 module_init(crypto_aegis128_aesni_module_init);