]> git.baikalelectronics.ru Git - kernel.git/commit
arm64: fpsimd: run kernel mode NEON with softirqs disabled
authorArd Biesheuvel <ardb@kernel.org>
Tue, 2 Mar 2021 09:01:12 +0000 (10:01 +0100)
committerCatalin Marinas <catalin.marinas@arm.com>
Mon, 12 Apr 2021 10:55:34 +0000 (11:55 +0100)
commit928d5f36b05bfc4e78312dc3d26505d5db933452
tree70eb693bdf0c9ca3753c9f7637a325549865770c
parent2a977bcdae85691aa30ea93068c8fd3c07f40048
arm64: fpsimd: run kernel mode NEON with softirqs disabled

Kernel mode NEON can be used in task or softirq context, but only in
a non-nesting manner, i.e., softirq context is only permitted if the
interrupt was not taken at a point where the kernel was using the NEON
in task context.

This means all users of kernel mode NEON have to be aware of this
limitation, and either need to provide scalar fallbacks that may be much
slower (up to 20x for AES instructions) and potentially less safe, or
use an asynchronous interface that defers processing to a later time
when the NEON is guaranteed to be available.

Given that grabbing and releasing the NEON is cheap, we can relax this
restriction, by increasing the granularity of kernel mode NEON code, and
always disabling softirq processing while the NEON is being used in task
context.

Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
Acked-by: Will Deacon <will@kernel.org>
Link: https://lore.kernel.org/r/20210302090118.30666-4-ardb@kernel.org
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
arch/arm64/crypto/aes-modes.S
arch/arm64/crypto/sha1-ce-core.S
arch/arm64/crypto/sha2-ce-core.S
arch/arm64/crypto/sha3-ce-core.S
arch/arm64/crypto/sha512-ce-core.S
arch/arm64/include/asm/assembler.h
arch/arm64/kernel/asm-offsets.c
arch/arm64/kernel/fpsimd.c