From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 49A6922578A for ; Fri, 22 Aug 2025 03:24:24 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755833065; cv=none; b=e1tYGOK555LyyjBT2ZBypBjU/IzI5vfIv66Xh14mPXL/72ShaHPqZzIQjlFnmD25xmTDKo1d5d1i0tcCUYbJUHdjJ8dve1JM4/6amJshsjP3MldV1TefaAB/02tsA1nlkbtTwKk00KFaNkG+JPwm93cePqKuAgEh/DmikIQ/MRE= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755833065; c=relaxed/simple; bh=pPsgGpbFAqwpvPv7Kll4cqG04TrcHLve5T4/GgNp/5c=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Ipuiogi5klJha0fB6e5kTtAK/NVQhOqpsw+iPJjfvnAgmdLC56LDYhKGF9q0v2/y8XBN1zbC8XGzOx6oIzKvgTb6Zsz0y+a7SNAF7B5cfZKfYa4912/YnWIg57G5QQQuSZyBn266RDxuOuo8zWeeKpp+R0ht7KQROtQ7XvoZ8io= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=r4S4tyG1; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="r4S4tyG1" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 3A7CCC116B1; Fri, 22 Aug 2025 03:24:24 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1755833064; bh=pPsgGpbFAqwpvPv7Kll4cqG04TrcHLve5T4/GgNp/5c=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=r4S4tyG1jw2JxpEMZZMd5sZ27hBJOG2BFCqav7GnELqUuCDO+ERuczv2TOl4t5cbD 9F1Edeurn9Zvzx7OctxJ3xGOrQkf1Et3VZpBBigzK2AGWLgFKvHoahHMjP7dpbNilG kKvOSjc/frC2Y+LBcv1DG7n8pS1RyqK8gRgxVz9py8FO3eYk2EJoMRGoIo4wcKEl0i DJNo7wpsO6augzpNos6QoblvosfXvWiSmza3uwxG2hQRv9KCyJHcGJ3Xn//RHqZoY8 WjyzvRvy9rJTWz1T42wLMtkndD8X5DOXViUXN7Xx7P0Z2+JRnfcrCZ1P3aZ48+zJ9R nN1+5hAJQcRWQ== From: Sasha Levin To: stable@vger.kernel.org Cc: Eric Biggers , Ondrej Mosnacek , Herbert Xu , Sasha Levin Subject: [PATCH 6.6.y 2/4] crypto: x86/aegis128 - optimize length block preparation using SSE4.1 Date: Thu, 21 Aug 2025 23:24:19 -0400 Message-ID: <20250822032421.1059778-2-sashal@kernel.org> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20250822032421.1059778-1-sashal@kernel.org> References: <2025082103-division-stoning-2306@gregkh> <20250822032421.1059778-1-sashal@kernel.org> Precedence: bulk X-Mailing-List: stable@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit From: Eric Biggers [ Upstream commit af2aff7caf8afb7abbe219a838d61b4c17d88a47 ] Start using SSE4.1 instructions in the AES-NI AEGIS code, with the first use case being preparing the length block in fewer instructions. In practice this does not reduce the set of CPUs on which the code can run, because all Intel and AMD CPUs with AES-NI also have SSE4.1. Upgrade the existing SSE2 feature check to SSE4.1, though it seems this check is not strictly necessary; the aesni-intel module has been getting away with using SSE4.1 despite checking for AES-NI only. Reviewed-by: Ondrej Mosnacek Signed-off-by: Eric Biggers Signed-off-by: Herbert Xu Stable-dep-of: c7f49dadfcdf ("crypto: x86/aegis - Fix sleeping when disallowed on PREEMPT_RT") Signed-off-by: Sasha Levin --- arch/x86/crypto/Kconfig | 4 ++-- arch/x86/crypto/aegis128-aesni-asm.S | 6 ++---- arch/x86/crypto/aegis128-aesni-glue.c | 6 +++--- 3 files changed, 7 insertions(+), 9 deletions(-) diff --git a/arch/x86/crypto/Kconfig b/arch/x86/crypto/Kconfig index 9bbfd01cfa2f..83f0a4229dba 100644 --- a/arch/x86/crypto/Kconfig +++ b/arch/x86/crypto/Kconfig @@ -358,7 +358,7 @@ config CRYPTO_CHACHA20_X86_64 - AVX-512VL (Advanced Vector Extensions-512VL) config CRYPTO_AEGIS128_AESNI_SSE2 - tristate "AEAD ciphers: AEGIS-128 (AES-NI/SSE2)" + tristate "AEAD ciphers: AEGIS-128 (AES-NI/SSE4.1)" depends on X86 && 64BIT select CRYPTO_AEAD select CRYPTO_SIMD @@ -367,7 +367,7 @@ config CRYPTO_AEGIS128_AESNI_SSE2 Architecture: x86_64 using: - AES-NI (AES New Instructions) - - SSE2 (Streaming SIMD Extensions 2) + - SSE4.1 (Streaming SIMD Extensions 4.1) config CRYPTO_NHPOLY1305_SSE2 tristate "Hash functions: NHPoly1305 (SSE2)" diff --git a/arch/x86/crypto/aegis128-aesni-asm.S b/arch/x86/crypto/aegis128-aesni-asm.S index 1b57558548c7..639ba6f31a90 100644 --- a/arch/x86/crypto/aegis128-aesni-asm.S +++ b/arch/x86/crypto/aegis128-aesni-asm.S @@ -1,6 +1,6 @@ /* SPDX-License-Identifier: GPL-2.0-only */ /* - * AES-NI + SSE2 implementation of AEGIS-128 + * AES-NI + SSE4.1 implementation of AEGIS-128 * * Copyright (c) 2017-2018 Ondrej Mosnacek * Copyright (C) 2017-2018 Red Hat, Inc. All rights reserved. @@ -716,9 +716,7 @@ SYM_FUNC_START(crypto_aegis128_aesni_final) /* prepare length block: */ movd %edx, MSG - movd %ecx, T0 - pslldq $8, T0 - pxor T0, MSG + pinsrd $2, %ecx, MSG psllq $3, MSG /* multiply by 8 (to get bit count) */ pxor STATE3, MSG diff --git a/arch/x86/crypto/aegis128-aesni-glue.c b/arch/x86/crypto/aegis128-aesni-glue.c index 6c4c2cda2c2d..9b52451f6fee 100644 --- a/arch/x86/crypto/aegis128-aesni-glue.c +++ b/arch/x86/crypto/aegis128-aesni-glue.c @@ -1,7 +1,7 @@ // SPDX-License-Identifier: GPL-2.0-or-later /* * The AEGIS-128 Authenticated-Encryption Algorithm - * Glue for AES-NI + SSE2 implementation + * Glue for AES-NI + SSE4.1 implementation * * Copyright (c) 2017-2018 Ondrej Mosnacek * Copyright (C) 2017-2018 Red Hat, Inc. All rights reserved. @@ -265,7 +265,7 @@ static struct simd_aead_alg *simd_alg; static int __init crypto_aegis128_aesni_module_init(void) { - if (!boot_cpu_has(X86_FEATURE_XMM2) || + if (!boot_cpu_has(X86_FEATURE_XMM4_1) || !boot_cpu_has(X86_FEATURE_AES) || !cpu_has_xfeatures(XFEATURE_MASK_SSE, NULL)) return -ENODEV; @@ -284,6 +284,6 @@ module_exit(crypto_aegis128_aesni_module_exit); MODULE_LICENSE("GPL"); MODULE_AUTHOR("Ondrej Mosnacek "); -MODULE_DESCRIPTION("AEGIS-128 AEAD algorithm -- AESNI+SSE2 implementation"); +MODULE_DESCRIPTION("AEGIS-128 AEAD algorithm -- AESNI+SSE4.1 implementation"); MODULE_ALIAS_CRYPTO("aegis128"); MODULE_ALIAS_CRYPTO("aegis128-aesni"); -- 2.50.1