Commit 6d575f11 authored by Eric Biggers's avatar Eric Biggers
Browse files

lib/crypto: arm64/sha3: Remove obsolete chunking logic



Since commit aefbab8e ("arm64: fpsimd: Preserve/restore kernel mode
NEON at context switch"), kernel-mode NEON sections have been
preemptible on arm64.  And since commit 7dadeaa6 ("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 SHA-3 code accordingly.

Reviewed-by: default avatarArd Biesheuvel <ardb@kernel.org>
Link: https://lore.kernel.org/r/20260401000548.133151-9-ebiggers@kernel.org


Signed-off-by: default avatarEric Biggers <ebiggers@kernel.org>
parent 7116418f
Loading
Loading
Loading
Loading
+3 −5
Original line number Diff line number Diff line
@@ -37,7 +37,7 @@
	.endm

	/*
	 * size_t sha3_ce_transform(struct sha3_state *state, const u8 *data,
	 * void sha3_ce_transform(struct sha3_state *state, const u8 *data,
	 *			  size_t nblocks, size_t block_size)
	 *
	 * block_size is assumed to be one of 72 (SHA3-512), 104 (SHA3-384), 136
@@ -185,18 +185,16 @@ SYM_FUNC_START(sha3_ce_transform)
	eor	 v0.16b,  v0.16b, v31.16b

	cbnz	w8, 3b
	cond_yield 4f, x8, x9
	cbnz	x2, 0b

	/* save state */
4:	st1	{ v0.1d- v3.1d}, [x0], #32
	st1	{ v0.1d- v3.1d}, [x0], #32
	st1	{ v4.1d- v7.1d}, [x0], #32
	st1	{ v8.1d-v11.1d}, [x0], #32
	st1	{v12.1d-v15.1d}, [x0], #32
	st1	{v16.1d-v19.1d}, [x0], #32
	st1	{v20.1d-v23.1d}, [x0], #32
	st1	{v24.1d}, [x0]
	mov	x0, x2
	ret
SYM_FUNC_END(sha3_ce_transform)

+4 −11
Original line number Diff line number Diff line
@@ -12,22 +12,15 @@

static __ro_after_init DEFINE_STATIC_KEY_FALSE(have_sha3);

asmlinkage size_t sha3_ce_transform(struct sha3_state *state, const u8 *data,
asmlinkage void sha3_ce_transform(struct sha3_state *state, const u8 *data,
				  size_t nblocks, size_t block_size);

static void sha3_absorb_blocks(struct sha3_state *state, const u8 *data,
			       size_t nblocks, size_t block_size)
{
	if (static_branch_likely(&have_sha3) && likely(may_use_simd())) {
		do {
			size_t rem;

		scoped_ksimd()
				rem = sha3_ce_transform(state, data, nblocks,
							block_size);
			data += (nblocks - rem) * block_size;
			nblocks = rem;
		} while (nblocks);
			sha3_ce_transform(state, data, nblocks, block_size);
	} else {
		sha3_absorb_blocks_generic(state, data, nblocks, block_size);
	}