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

lib/crypto: riscv: Depend on RISCV_EFFICIENT_VECTOR_UNALIGNED_ACCESS

Replace the RISCV_ISA_V dependency of the RISC-V crypto code with
RISCV_EFFICIENT_VECTOR_UNALIGNED_ACCESS, which implies RISCV_ISA_V as
well as vector unaligned accesses being efficient.

This is necessary because this code assumes that vector unaligned
accesses are supported and are efficient. (It does so to avoid having
to use lots of extra vsetvli instructions to switch the element width
back and forth between 8 and either 32 or 64.)

This was omitted from the code originally just because the RISC-V kernel
support for detecting this feature didn't exist yet. Support has now
been added, but it's fragmented into per-CPU runtime detection, a
command-line parameter, and a kconfig option. The kconfig option is the
only reasonable way to do it, though, so let's just rely on that.

Fixes: eb24af5d7a05 ("crypto: riscv - add vector crypto accelerated AES-{ECB,CBC,CTR,XTS}")
Fixes: bb54668837a0 ("crypto: riscv - add vector crypto accelerated ChaCha20")
Fixes: 600a3853dfa0 ("crypto: riscv - add vector crypto accelerated GHASH")
Fixes: 8c8e40470ffe ("crypto: riscv - add vector crypto accelerated SHA-{256,224}")
Fixes: b3415925a08b ("crypto: riscv - add vector crypto accelerated SHA-{512,384}")
Fixes: 563a5255afa2 ("crypto: riscv - add vector crypto accelerated SM3")
Fixes: b8d06352bbf3 ("crypto: riscv - add vector crypto accelerated SM4")
Cc: stable@vger.kernel.org
Reported-by: Vivian Wang <wangruikang@iscas.ac.cn>
Closes: https://lore.kernel.org/r/b3cfcdac-0337-4db0-a611-258f2868855f@iscas.ac.cn/
Reviewed-by: Jerry Shih <jerry.shih@sifive.com>
Link: https://lore.kernel.org/r/20251206213750.81474-1-ebiggers@kernel.org
Signed-off-by: Eric Biggers <ebiggers@kernel.org>

+14 -7
+8 -4
arch/riscv/crypto/Kconfig
··· 4 4 5 5 config CRYPTO_AES_RISCV64 6 6 tristate "Ciphers: AES, modes: ECB, CBC, CTS, CTR, XTS" 7 - depends on 64BIT && RISCV_ISA_V && TOOLCHAIN_HAS_VECTOR_CRYPTO 7 + depends on 64BIT && TOOLCHAIN_HAS_VECTOR_CRYPTO && \ 8 + RISCV_EFFICIENT_VECTOR_UNALIGNED_ACCESS 8 9 select CRYPTO_ALGAPI 9 10 select CRYPTO_LIB_AES 10 11 select CRYPTO_SKCIPHER ··· 21 20 22 21 config CRYPTO_GHASH_RISCV64 23 22 tristate "Hash functions: GHASH" 24 - depends on 64BIT && RISCV_ISA_V && TOOLCHAIN_HAS_VECTOR_CRYPTO 23 + depends on 64BIT && TOOLCHAIN_HAS_VECTOR_CRYPTO && \ 24 + RISCV_EFFICIENT_VECTOR_UNALIGNED_ACCESS 25 25 select CRYPTO_GCM 26 26 help 27 27 GCM GHASH function (NIST SP 800-38D) ··· 32 30 33 31 config CRYPTO_SM3_RISCV64 34 32 tristate "Hash functions: SM3 (ShangMi 3)" 35 - depends on 64BIT && RISCV_ISA_V && TOOLCHAIN_HAS_VECTOR_CRYPTO 33 + depends on 64BIT && TOOLCHAIN_HAS_VECTOR_CRYPTO && \ 34 + RISCV_EFFICIENT_VECTOR_UNALIGNED_ACCESS 36 35 select CRYPTO_HASH 37 36 select CRYPTO_LIB_SM3 38 37 help ··· 45 42 46 43 config CRYPTO_SM4_RISCV64 47 44 tristate "Ciphers: SM4 (ShangMi 4)" 48 - depends on 64BIT && RISCV_ISA_V && TOOLCHAIN_HAS_VECTOR_CRYPTO 45 + depends on 64BIT && TOOLCHAIN_HAS_VECTOR_CRYPTO && \ 46 + RISCV_EFFICIENT_VECTOR_UNALIGNED_ACCESS 49 47 select CRYPTO_ALGAPI 50 48 select CRYPTO_SM4 51 49 help
+6 -3
lib/crypto/Kconfig
··· 61 61 default y if ARM64 && KERNEL_MODE_NEON 62 62 default y if MIPS && CPU_MIPS32_R2 63 63 default y if PPC64 && CPU_LITTLE_ENDIAN && VSX 64 - default y if RISCV && 64BIT && RISCV_ISA_V && TOOLCHAIN_HAS_VECTOR_CRYPTO 64 + default y if RISCV && 64BIT && TOOLCHAIN_HAS_VECTOR_CRYPTO && \ 65 + RISCV_EFFICIENT_VECTOR_UNALIGNED_ACCESS 65 66 default y if S390 66 67 default y if X86_64 67 68 ··· 185 184 default y if ARM64 186 185 default y if MIPS && CPU_CAVIUM_OCTEON 187 186 default y if PPC && SPE 188 - default y if RISCV && 64BIT && RISCV_ISA_V && TOOLCHAIN_HAS_VECTOR_CRYPTO 187 + default y if RISCV && 64BIT && TOOLCHAIN_HAS_VECTOR_CRYPTO && \ 188 + RISCV_EFFICIENT_VECTOR_UNALIGNED_ACCESS 189 189 default y if S390 190 190 default y if SPARC64 191 191 default y if X86_64 ··· 204 202 default y if ARM && !CPU_V7M 205 203 default y if ARM64 206 204 default y if MIPS && CPU_CAVIUM_OCTEON 207 - default y if RISCV && 64BIT && RISCV_ISA_V && TOOLCHAIN_HAS_VECTOR_CRYPTO 205 + default y if RISCV && 64BIT && TOOLCHAIN_HAS_VECTOR_CRYPTO && \ 206 + RISCV_EFFICIENT_VECTOR_UNALIGNED_ACCESS 208 207 default y if S390 209 208 default y if SPARC64 210 209 default y if X86_64