]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
raid6: Move to more abstract 'ksimd' guard API
authorArd Biesheuvel <ardb@kernel.org>
Wed, 1 Oct 2025 10:23:40 +0000 (12:23 +0200)
committerArd Biesheuvel <ardb@kernel.org>
Wed, 12 Nov 2025 08:52:01 +0000 (09:52 +0100)
Move away from calling kernel_neon_begin() and kernel_neon_end()
directly, and instead, use the newly introduced scoped_ksimd() API. This
permits arm64 to modify the kernel mode NEON API without affecting code
that is shared between ARM and arm64.

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>
lib/raid6/neon.c
lib/raid6/recov_neon.c

index 0a2e76035ea960b31ab9be9a5db8f476e372d35b..6d9474ce6da9171e8d735b4c5a7e6e48c0c8ace7 100644 (file)
@@ -8,10 +8,9 @@
 #include <linux/raid/pq.h>
 
 #ifdef __KERNEL__
-#include <asm/neon.h>
+#include <asm/simd.h>
 #else
-#define kernel_neon_begin()
-#define kernel_neon_end()
+#define scoped_ksimd()
 #define cpu_has_neon()         (1)
 #endif
 
        {                                                               \
                void raid6_neon ## _n  ## _gen_syndrome_real(int,       \
                                                unsigned long, void**); \
-               kernel_neon_begin();                                    \
-               raid6_neon ## _n ## _gen_syndrome_real(disks,           \
+               scoped_ksimd()                                          \
+                       raid6_neon ## _n ## _gen_syndrome_real(disks,   \
                                        (unsigned long)bytes, ptrs);    \
-               kernel_neon_end();                                      \
        }                                                               \
        static void raid6_neon ## _n ## _xor_syndrome(int disks,        \
                                        int start, int stop,            \
        {                                                               \
                void raid6_neon ## _n  ## _xor_syndrome_real(int,       \
                                int, int, unsigned long, void**);       \
-               kernel_neon_begin();                                    \
-               raid6_neon ## _n ## _xor_syndrome_real(disks,           \
-                       start, stop, (unsigned long)bytes, ptrs);       \
-               kernel_neon_end();                                      \
+               scoped_ksimd()                                          \
+                       raid6_neon ## _n ## _xor_syndrome_real(disks,   \
+                               start, stop, (unsigned long)bytes, ptrs);\
        }                                                               \
        struct raid6_calls const raid6_neonx ## _n = {                  \
                raid6_neon ## _n ## _gen_syndrome,                      \
index 70e1404c151292c752a7a7d7ef415dc189fbfe14..9d99aeabd31a9098eca437c4e5c26c98cce87b5a 100644 (file)
@@ -7,11 +7,10 @@
 #include <linux/raid/pq.h>
 
 #ifdef __KERNEL__
-#include <asm/neon.h>
+#include <asm/simd.h>
 #include "neon.h"
 #else
-#define kernel_neon_begin()
-#define kernel_neon_end()
+#define scoped_ksimd()
 #define cpu_has_neon()         (1)
 #endif
 
@@ -55,9 +54,8 @@ static void raid6_2data_recov_neon(int disks, size_t bytes, int faila,
        qmul  = raid6_vgfmul[raid6_gfinv[raid6_gfexp[faila] ^
                                         raid6_gfexp[failb]]];
 
-       kernel_neon_begin();
-       __raid6_2data_recov_neon(bytes, p, q, dp, dq, pbmul, qmul);
-       kernel_neon_end();
+       scoped_ksimd()
+               __raid6_2data_recov_neon(bytes, p, q, dp, dq, pbmul, qmul);
 }
 
 static void raid6_datap_recov_neon(int disks, size_t bytes, int faila,
@@ -86,9 +84,8 @@ static void raid6_datap_recov_neon(int disks, size_t bytes, int faila,
        /* Now, pick the proper data tables */
        qmul = raid6_vgfmul[raid6_gfinv[raid6_gfexp[faila]]];
 
-       kernel_neon_begin();
-       __raid6_datap_recov_neon(bytes, p, q, dq, qmul);
-       kernel_neon_end();
+       scoped_ksimd()
+               __raid6_datap_recov_neon(bytes, p, q, dq, qmul);
 }
 
 const struct raid6_recov_calls raid6_recov_neon = {