mirror of
https://github.com/torvalds/linux.git
synced 2026-05-28 09:04:39 +02:00
Since commitaefbab8e77("arm64: fpsimd: Preserve/restore kernel mode NEON at context switch"), kernel-mode NEON sections have been preemptible on arm64. And since commit7dadeaa6e8("sched: Further restrict the preemption modes"), voluntary preemption is no longer supported on arm64 either. Therefore, there's no longer any need to limit the length of kernel-mode NEON sections on arm64. Simplify the Poly1305 code accordingly. Reviewed-by: Ard Biesheuvel <ardb@kernel.org> Link: https://lore.kernel.org/r/20260401000548.133151-5-ebiggers@kernel.org Signed-off-by: Eric Biggers <ebiggers@kernel.org>
43 lines
1.3 KiB
C
43 lines
1.3 KiB
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
/*
|
|
* OpenSSL/Cryptogams accelerated Poly1305 transform for arm64
|
|
*
|
|
* Copyright (C) 2019 Linaro Ltd. <ard.biesheuvel@linaro.org>
|
|
*/
|
|
|
|
#include <asm/hwcap.h>
|
|
#include <asm/simd.h>
|
|
#include <linux/cpufeature.h>
|
|
#include <linux/jump_label.h>
|
|
#include <linux/kernel.h>
|
|
|
|
asmlinkage void poly1305_block_init(struct poly1305_block_state *state,
|
|
const u8 raw_key[POLY1305_BLOCK_SIZE]);
|
|
asmlinkage void poly1305_blocks_arm64(struct poly1305_block_state *state,
|
|
const u8 *src, u32 len, u32 hibit);
|
|
asmlinkage void poly1305_blocks_neon(struct poly1305_block_state *state,
|
|
const u8 *src, u32 len, u32 hibit);
|
|
asmlinkage void poly1305_emit(const struct poly1305_state *state,
|
|
u8 digest[POLY1305_DIGEST_SIZE],
|
|
const u32 nonce[4]);
|
|
|
|
static __ro_after_init DEFINE_STATIC_KEY_FALSE(have_neon);
|
|
|
|
static void poly1305_blocks(struct poly1305_block_state *state, const u8 *src,
|
|
unsigned int len, u32 padbit)
|
|
{
|
|
if (static_branch_likely(&have_neon) && likely(may_use_simd())) {
|
|
scoped_ksimd()
|
|
poly1305_blocks_neon(state, src, len, padbit);
|
|
} else {
|
|
poly1305_blocks_arm64(state, src, len, padbit);
|
|
}
|
|
}
|
|
|
|
#define poly1305_mod_init_arch poly1305_mod_init_arch
|
|
static void poly1305_mod_init_arch(void)
|
|
{
|
|
if (cpu_have_named_feature(ASIMD))
|
|
static_branch_enable(&have_neon);
|
|
}
|