]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
crypto/arm64: sm3 - Switch to 'ksimd' scoped guard API
authorArd Biesheuvel <ardb@kernel.org>
Wed, 1 Oct 2025 11:47:45 +0000 (13:47 +0200)
committerArd Biesheuvel <ardb@kernel.org>
Wed, 12 Nov 2025 08:52:02 +0000 (09:52 +0100)
Switch to the more abstract 'scoped_ksimd()' API, which will be modified
in a future patch to transparently allocate a kernel mode FP/SIMD state
buffer on the stack, so that kernel mode FP/SIMD code remains
preemptible in principle, but without the memory overhead that adds 528
bytes to the size of struct task_struct.

Reviewed-by: Eric Biggers <ebiggers@kernel.org>
Reviewed-by: Jonathan Cameron <jonathan.cameron@huawei.com>
Acked-by: Catalin Marinas <catalin.marinas@arm.com>
Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
arch/arm64/crypto/sm3-ce-glue.c
arch/arm64/crypto/sm3-neon-glue.c

index eac6f5fa0abe3c35aed86665c8fcfbe55de01e33..24c1fcfae0721e657652cd824a58b3dc14a42445 100644 (file)
@@ -5,7 +5,6 @@
  * Copyright (C) 2018 Linaro Ltd <ard.biesheuvel@linaro.org>
  */
 
-#include <asm/neon.h>
 #include <crypto/internal/hash.h>
 #include <crypto/sm3.h>
 #include <crypto/sm3_base.h>
@@ -13,6 +12,8 @@
 #include <linux/kernel.h>
 #include <linux/module.h>
 
+#include <asm/simd.h>
+
 MODULE_DESCRIPTION("SM3 secure hash using ARMv8 Crypto Extensions");
 MODULE_AUTHOR("Ard Biesheuvel <ard.biesheuvel@linaro.org>");
 MODULE_LICENSE("GPL v2");
@@ -25,18 +26,18 @@ static int sm3_ce_update(struct shash_desc *desc, const u8 *data,
 {
        int remain;
 
-       kernel_neon_begin();
-       remain = sm3_base_do_update_blocks(desc, data, len, sm3_ce_transform);
-       kernel_neon_end();
+       scoped_ksimd() {
+               remain = sm3_base_do_update_blocks(desc, data, len, sm3_ce_transform);
+       }
        return remain;
 }
 
 static int sm3_ce_finup(struct shash_desc *desc, const u8 *data,
                        unsigned int len, u8 *out)
 {
-       kernel_neon_begin();
-       sm3_base_do_finup(desc, data, len, sm3_ce_transform);
-       kernel_neon_end();
+       scoped_ksimd() {
+               sm3_base_do_finup(desc, data, len, sm3_ce_transform);
+       }
        return sm3_base_finish(desc, out);
 }
 
index 6c4611a503a345acf8b903f93e7d60aced237357..15f30cc24f32b3f7c2eb6852e598bf32af9e0b88 100644 (file)
@@ -5,7 +5,7 @@
  * Copyright (C) 2022 Tianjia Zhang <tianjia.zhang@linux.alibaba.com>
  */
 
-#include <asm/neon.h>
+#include <asm/simd.h>
 #include <crypto/internal/hash.h>
 #include <crypto/sm3.h>
 #include <crypto/sm3_base.h>
@@ -20,20 +20,16 @@ asmlinkage void sm3_neon_transform(struct sm3_state *sst, u8 const *src,
 static int sm3_neon_update(struct shash_desc *desc, const u8 *data,
                           unsigned int len)
 {
-       int remain;
-
-       kernel_neon_begin();
-       remain = sm3_base_do_update_blocks(desc, data, len, sm3_neon_transform);
-       kernel_neon_end();
-       return remain;
+       scoped_ksimd()
+               return sm3_base_do_update_blocks(desc, data, len,
+                                                sm3_neon_transform);
 }
 
 static int sm3_neon_finup(struct shash_desc *desc, const u8 *data,
                          unsigned int len, u8 *out)
 {
-       kernel_neon_begin();
-       sm3_base_do_finup(desc, data, len, sm3_neon_transform);
-       kernel_neon_end();
+       scoped_ksimd()
+               sm3_base_do_finup(desc, data, len, sm3_neon_transform);
        return sm3_base_finish(desc, out);
 }