]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
lib/crypto: arm64: Drop checks for CONFIG_KERNEL_MODE_NEON
authorEric Biggers <ebiggers@kernel.org>
Sat, 14 Mar 2026 17:50:49 +0000 (10:50 -0700)
committerEric Biggers <ebiggers@kernel.org>
Thu, 19 Mar 2026 17:10:30 +0000 (10:10 -0700)
CONFIG_KERNEL_MODE_NEON is always enabled on arm64, and it always has
been since its introduction in 2013.  Given that and the fact that the
usefulness of kernel-mode NEON has only been increasing over time,
checking for this option in arm64-specific code is unnecessary.  Remove
these checks from lib/crypto/ to simplify the code and prevent any
future bugs where e.g. code gets disabled due to a typo in this logic.

Acked-by: Ard Biesheuvel <ardb@kernel.org>
Link: https://lore.kernel.org/r/20260314175049.26931-1-ebiggers@kernel.org
Signed-off-by: Eric Biggers <ebiggers@kernel.org>
lib/crypto/Kconfig
lib/crypto/Makefile
lib/crypto/arm64/aes.h
lib/crypto/arm64/sha256.h
lib/crypto/arm64/sha512.h

index 42ec516459159f4bc53cadaf32f9cee0e9dc9951..4910fe20e42adcd458728c5695c0c5f0665387d2 100644 (file)
@@ -80,7 +80,7 @@ config CRYPTO_LIB_CHACHA_ARCH
        bool
        depends on CRYPTO_LIB_CHACHA && !UML && !KMSAN
        default y if ARM
-       default y if ARM64 && KERNEL_MODE_NEON
+       default y if ARM64
        default y if MIPS && CPU_MIPS32_R2
        default y if PPC64 && CPU_LITTLE_ENDIAN && VSX
        default y if RISCV && 64BIT && TOOLCHAIN_HAS_VECTOR_CRYPTO && \
@@ -140,7 +140,7 @@ config CRYPTO_LIB_NH_ARCH
        bool
        depends on CRYPTO_LIB_NH && !UML && !KMSAN
        default y if ARM && KERNEL_MODE_NEON
-       default y if ARM64 && KERNEL_MODE_NEON
+       default y if ARM64
        default y if X86_64
 
 config CRYPTO_LIB_POLY1305
@@ -153,7 +153,7 @@ config CRYPTO_LIB_POLY1305_ARCH
        bool
        depends on CRYPTO_LIB_POLY1305 && !UML && !KMSAN
        default y if ARM
-       default y if ARM64 && KERNEL_MODE_NEON
+       default y if ARM64
        default y if MIPS
        # The PPC64 code needs to be fixed to work in softirq context.
        default y if PPC64 && CPU_LITTLE_ENDIAN && VSX && BROKEN
@@ -187,7 +187,7 @@ config CRYPTO_LIB_POLYVAL
 config CRYPTO_LIB_POLYVAL_ARCH
        bool
        depends on CRYPTO_LIB_POLYVAL && !UML
-       default y if ARM64 && KERNEL_MODE_NEON
+       default y if ARM64
        default y if X86_64
 
 config CRYPTO_LIB_CHACHA20POLY1305
@@ -206,7 +206,7 @@ config CRYPTO_LIB_SHA1_ARCH
        bool
        depends on CRYPTO_LIB_SHA1 && !UML
        default y if ARM
-       default y if ARM64 && KERNEL_MODE_NEON
+       default y if ARM64
        default y if MIPS && CPU_CAVIUM_OCTEON
        default y if PPC
        default y if S390
@@ -262,7 +262,7 @@ config CRYPTO_LIB_SHA3
 config CRYPTO_LIB_SHA3_ARCH
        bool
        depends on CRYPTO_LIB_SHA3 && !UML
-       default y if ARM64 && KERNEL_MODE_NEON
+       default y if ARM64
        default y if S390
 
 config CRYPTO_LIB_SM3
index c05d4b4e8e8260f3b012a41ca0ce41e3dab0beaf..a961615c8c7f288c0c3923c097b2785f1dc05fc6 100644 (file)
@@ -23,13 +23,10 @@ ifeq ($(CONFIG_CRYPTO_LIB_AES_ARCH),y)
 CFLAGS_aes.o += -I$(src)/$(SRCARCH)
 
 libaes-$(CONFIG_ARM) += arm/aes-cipher-core.o
-
-ifeq ($(CONFIG_ARM64),y)
-libaes-y += arm64/aes-cipher-core.o
-libaes-$(CONFIG_KERNEL_MODE_NEON) += arm64/aes-ce-core.o \
-                                    arm64/aes-ce.o \
-                                    arm64/aes-neon.o
-endif
+libaes-$(CONFIG_ARM64) += arm64/aes-cipher-core.o \
+                         arm64/aes-ce-core.o \
+                         arm64/aes-ce.o \
+                         arm64/aes-neon.o
 
 ifeq ($(CONFIG_PPC),y)
 ifeq ($(CONFIG_SPE),y)
@@ -299,10 +296,9 @@ AFLAGS_arm/sha256-core.o += $(aflags-thumb2-y)
 endif
 
 ifeq ($(CONFIG_ARM64),y)
-libsha256-y += arm64/sha256-core.o
+libsha256-y += arm64/sha256-ce.o arm64/sha256-core.o
 $(obj)/arm64/sha256-core.S: $(src)/arm64/sha2-armv8.pl
        $(call cmd,perlasm_with_args)
-libsha256-$(CONFIG_KERNEL_MODE_NEON) += arm64/sha256-ce.o
 endif
 
 libsha256-$(CONFIG_PPC) += powerpc/sha256-spe-asm.o
@@ -329,10 +325,9 @@ AFLAGS_arm/sha512-core.o += $(aflags-thumb2-y)
 endif
 
 ifeq ($(CONFIG_ARM64),y)
-libsha512-y += arm64/sha512-core.o
+libsha512-y += arm64/sha512-ce-core.o arm64/sha512-core.o
 $(obj)/arm64/sha512-core.S: $(src)/arm64/sha2-armv8.pl
        $(call cmd,perlasm_with_args)
-libsha512-$(CONFIG_KERNEL_MODE_NEON) += arm64/sha512-ce-core.o
 endif
 
 libsha512-$(CONFIG_RISCV) += riscv/sha512-riscv64-zvknhb-zvkb.o
index 78e7b4e5f1206d4b37f05acdefee78a5447f2285..135d3324a30a68cb77d5a4e2f66022f556346919 100644 (file)
@@ -52,8 +52,7 @@ static void aes_expandkey_arm64(u32 rndkeys[], u32 *inv_rndkeys,
        struct aes_block *key_enc, *key_dec;
        int i, j;
 
-       if (!IS_ENABLED(CONFIG_KERNEL_MODE_NEON) ||
-           !static_branch_likely(&have_aes) || unlikely(!may_use_simd())) {
+       if (!static_branch_likely(&have_aes) || unlikely(!may_use_simd())) {
                aes_expandkey_generic(rndkeys, inv_rndkeys, in_key, key_len);
                return;
        }
@@ -130,7 +129,6 @@ int ce_aes_expandkey(struct crypto_aes_ctx *ctx, const u8 *in_key,
 }
 EXPORT_SYMBOL(ce_aes_expandkey);
 
-#if IS_ENABLED(CONFIG_KERNEL_MODE_NEON)
 EXPORT_SYMBOL_NS_GPL(neon_aes_ecb_encrypt, "CRYPTO_INTERNAL");
 EXPORT_SYMBOL_NS_GPL(neon_aes_ecb_decrypt, "CRYPTO_INTERNAL");
 EXPORT_SYMBOL_NS_GPL(neon_aes_cbc_encrypt, "CRYPTO_INTERNAL");
@@ -156,7 +154,6 @@ EXPORT_SYMBOL_NS_GPL(ce_aes_xts_encrypt, "CRYPTO_INTERNAL");
 EXPORT_SYMBOL_NS_GPL(ce_aes_xts_decrypt, "CRYPTO_INTERNAL");
 EXPORT_SYMBOL_NS_GPL(ce_aes_essiv_cbc_encrypt, "CRYPTO_INTERNAL");
 EXPORT_SYMBOL_NS_GPL(ce_aes_essiv_cbc_decrypt, "CRYPTO_INTERNAL");
-#endif
 #if IS_MODULE(CONFIG_CRYPTO_AES_ARM64_CE_CCM)
 EXPORT_SYMBOL_NS_GPL(ce_aes_mac_update, "CRYPTO_INTERNAL");
 #endif
@@ -165,8 +162,7 @@ static void aes_encrypt_arch(const struct aes_enckey *key,
                             u8 out[AES_BLOCK_SIZE],
                             const u8 in[AES_BLOCK_SIZE])
 {
-       if (IS_ENABLED(CONFIG_KERNEL_MODE_NEON) &&
-           static_branch_likely(&have_aes) && likely(may_use_simd())) {
+       if (static_branch_likely(&have_aes) && likely(may_use_simd())) {
                scoped_ksimd()
                        __aes_ce_encrypt(key->k.rndkeys, out, in, key->nrounds);
        } else {
@@ -178,8 +174,7 @@ static void aes_decrypt_arch(const struct aes_key *key,
                             u8 out[AES_BLOCK_SIZE],
                             const u8 in[AES_BLOCK_SIZE])
 {
-       if (IS_ENABLED(CONFIG_KERNEL_MODE_NEON) &&
-           static_branch_likely(&have_aes) && likely(may_use_simd())) {
+       if (static_branch_likely(&have_aes) && likely(may_use_simd())) {
                scoped_ksimd()
                        __aes_ce_decrypt(key->inv_k.inv_rndkeys, out, in,
                                         key->nrounds);
@@ -196,8 +191,7 @@ static bool aes_cbcmac_blocks_arch(u8 h[AES_BLOCK_SIZE],
                                   size_t nblocks, bool enc_before,
                                   bool enc_after)
 {
-       if (IS_ENABLED(CONFIG_KERNEL_MODE_NEON) &&
-           static_branch_likely(&have_neon) && likely(may_use_simd())) {
+       if (static_branch_likely(&have_neon) && likely(may_use_simd())) {
                do {
                        size_t rem;
 
@@ -223,7 +217,6 @@ static bool aes_cbcmac_blocks_arch(u8 h[AES_BLOCK_SIZE],
 }
 #endif /* CONFIG_CRYPTO_LIB_AES_CBC_MACS */
 
-#ifdef CONFIG_KERNEL_MODE_NEON
 #define aes_mod_init_arch aes_mod_init_arch
 static void aes_mod_init_arch(void)
 {
@@ -233,4 +226,3 @@ static void aes_mod_init_arch(void)
                        static_branch_enable(&have_aes);
        }
 }
-#endif /* CONFIG_KERNEL_MODE_NEON */
index 568dff0f276af4a226d6eb75c44bf068148b9e18..1fad3d7baa9a225300593f92983899f4b539b1df 100644 (file)
@@ -20,8 +20,7 @@ asmlinkage size_t __sha256_ce_transform(struct sha256_block_state *state,
 static void sha256_blocks(struct sha256_block_state *state,
                          const u8 *data, size_t nblocks)
 {
-       if (IS_ENABLED(CONFIG_KERNEL_MODE_NEON) &&
-           static_branch_likely(&have_neon) && likely(may_use_simd())) {
+       if (static_branch_likely(&have_neon) && likely(may_use_simd())) {
                if (static_branch_likely(&have_ce)) {
                        do {
                                size_t rem;
@@ -61,8 +60,7 @@ static bool sha256_finup_2x_arch(const struct __sha256_ctx *ctx,
         * Further limit len to 65536 to avoid spending too long with preemption
         * disabled.  (Of course, in practice len is nearly always 4096 anyway.)
         */
-       if (IS_ENABLED(CONFIG_KERNEL_MODE_NEON) &&
-           static_branch_likely(&have_ce) && len >= SHA256_BLOCK_SIZE &&
+       if (static_branch_likely(&have_ce) && len >= SHA256_BLOCK_SIZE &&
            len <= 65536 && likely(may_use_simd())) {
                scoped_ksimd()
                        sha256_ce_finup2x(ctx, data1, data2, len, out1, out2);
@@ -78,7 +76,6 @@ static bool sha256_finup_2x_is_optimized_arch(void)
        return static_key_enabled(&have_ce);
 }
 
-#ifdef CONFIG_KERNEL_MODE_NEON
 #define sha256_mod_init_arch sha256_mod_init_arch
 static void sha256_mod_init_arch(void)
 {
@@ -88,4 +85,3 @@ static void sha256_mod_init_arch(void)
                        static_branch_enable(&have_ce);
        }
 }
-#endif /* CONFIG_KERNEL_MODE_NEON */
index 7eb7ef04d2687aa7f2742c99a6d4cb8ba44ce577..d978c4d07e905388fbf5dbb866cb0e77fd1317cd 100644 (file)
@@ -18,8 +18,7 @@ asmlinkage size_t __sha512_ce_transform(struct sha512_block_state *state,
 static void sha512_blocks(struct sha512_block_state *state,
                          const u8 *data, size_t nblocks)
 {
-       if (IS_ENABLED(CONFIG_KERNEL_MODE_NEON) &&
-           static_branch_likely(&have_sha512_insns) &&
+       if (static_branch_likely(&have_sha512_insns) &&
            likely(may_use_simd())) {
                do {
                        size_t rem;
@@ -35,11 +34,9 @@ static void sha512_blocks(struct sha512_block_state *state,
        }
 }
 
-#ifdef CONFIG_KERNEL_MODE_NEON
 #define sha512_mod_init_arch sha512_mod_init_arch
 static void sha512_mod_init_arch(void)
 {
        if (cpu_have_named_feature(SHA512))
                static_branch_enable(&have_sha512_insns);
 }
-#endif /* CONFIG_KERNEL_MODE_NEON */