Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

raid6: Move to more abstract 'ksimd' guard API

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>

+13 -19
+7 -10
lib/raid6/neon.c
··· 8 8 #include <linux/raid/pq.h> 9 9 10 10 #ifdef __KERNEL__ 11 - #include <asm/neon.h> 11 + #include <asm/simd.h> 12 12 #else 13 - #define kernel_neon_begin() 14 - #define kernel_neon_end() 13 + #define scoped_ksimd() 15 14 #define cpu_has_neon() (1) 16 15 #endif 17 16 ··· 31 32 { \ 32 33 void raid6_neon ## _n ## _gen_syndrome_real(int, \ 33 34 unsigned long, void**); \ 34 - kernel_neon_begin(); \ 35 - raid6_neon ## _n ## _gen_syndrome_real(disks, \ 35 + scoped_ksimd() \ 36 + raid6_neon ## _n ## _gen_syndrome_real(disks, \ 36 37 (unsigned long)bytes, ptrs); \ 37 - kernel_neon_end(); \ 38 38 } \ 39 39 static void raid6_neon ## _n ## _xor_syndrome(int disks, \ 40 40 int start, int stop, \ ··· 41 43 { \ 42 44 void raid6_neon ## _n ## _xor_syndrome_real(int, \ 43 45 int, int, unsigned long, void**); \ 44 - kernel_neon_begin(); \ 45 - raid6_neon ## _n ## _xor_syndrome_real(disks, \ 46 - start, stop, (unsigned long)bytes, ptrs); \ 47 - kernel_neon_end(); \ 46 + scoped_ksimd() \ 47 + raid6_neon ## _n ## _xor_syndrome_real(disks, \ 48 + start, stop, (unsigned long)bytes, ptrs);\ 48 49 } \ 49 50 struct raid6_calls const raid6_neonx ## _n = { \ 50 51 raid6_neon ## _n ## _gen_syndrome, \
+6 -9
lib/raid6/recov_neon.c
··· 7 7 #include <linux/raid/pq.h> 8 8 9 9 #ifdef __KERNEL__ 10 - #include <asm/neon.h> 10 + #include <asm/simd.h> 11 11 #include "neon.h" 12 12 #else 13 - #define kernel_neon_begin() 14 - #define kernel_neon_end() 13 + #define scoped_ksimd() 15 14 #define cpu_has_neon() (1) 16 15 #endif 17 16 ··· 54 55 qmul = raid6_vgfmul[raid6_gfinv[raid6_gfexp[faila] ^ 55 56 raid6_gfexp[failb]]]; 56 57 57 - kernel_neon_begin(); 58 - __raid6_2data_recov_neon(bytes, p, q, dp, dq, pbmul, qmul); 59 - kernel_neon_end(); 58 + scoped_ksimd() 59 + __raid6_2data_recov_neon(bytes, p, q, dp, dq, pbmul, qmul); 60 60 } 61 61 62 62 static void raid6_datap_recov_neon(int disks, size_t bytes, int faila, ··· 84 86 /* Now, pick the proper data tables */ 85 87 qmul = raid6_vgfmul[raid6_gfinv[raid6_gfexp[faila]]]; 86 88 87 - kernel_neon_begin(); 88 - __raid6_datap_recov_neon(bytes, p, q, dq, qmul); 89 - kernel_neon_end(); 89 + scoped_ksimd() 90 + __raid6_datap_recov_neon(bytes, p, q, dq, qmul); 90 91 } 91 92 92 93 const struct raid6_recov_calls raid6_recov_neon = {