mirror of
https://github.com/torvalds/linux.git
synced 2026-10-24 16:55:02 +02:00
crypto: x86 - Stop using cpu_has_xfeatures()
Checking both boot_cpu_has(X86_FEATURE_AVX*) and cpu_has_xfeatures() has never really been needed in practice, and it's never been universally done (e.g., lib/raid/ omits cpu_has_xfeatures()). Nevertheless, both x86 and UML now explicitly clear the AVX and AVX-512 flags if their xfeatures are missing, which should remove any remaining doubts. Thus, remove all the calls to cpu_has_xfeatures(), as well as the related checks of boot_cpu_has(X86_FEATURE_OSXSAVE). In a few cases there was no corresponding boot_cpu_has(X86_FEATURE_AVX*) check, so add the missing ones. Signed-off-by: Eric Biggers <ebiggers@kernel.org> Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de> Acked-by: Christoph Hellwig <hch@lst.de> Link: https://patch.msgid.link/20260901145740.42337-4-ebiggers@kernel.org
This commit is contained in:
parent
19c5d90800
commit
9256e0496c
|
|
@ -265,8 +265,7 @@ static struct aead_alg crypto_aegis128_aesni_alg = {
|
|||
static int __init crypto_aegis128_aesni_module_init(void)
|
||||
{
|
||||
if (!boot_cpu_has(X86_FEATURE_XMM4_1) ||
|
||||
!boot_cpu_has(X86_FEATURE_AES) ||
|
||||
!cpu_has_xfeatures(XFEATURE_MASK_SSE, NULL))
|
||||
!boot_cpu_has(X86_FEATURE_AES))
|
||||
return -ENODEV;
|
||||
|
||||
return crypto_register_aead(&crypto_aegis128_aesni_alg);
|
||||
|
|
|
|||
|
|
@ -1548,8 +1548,7 @@ static int __init register_avx_algs(void)
|
|||
if (!boot_cpu_has(X86_FEATURE_AVX2) ||
|
||||
!boot_cpu_has(X86_FEATURE_VAES) ||
|
||||
!boot_cpu_has(X86_FEATURE_VPCLMULQDQ) ||
|
||||
!boot_cpu_has(X86_FEATURE_PCLMULQDQ) ||
|
||||
!cpu_has_xfeatures(XFEATURE_MASK_SSE | XFEATURE_MASK_YMM, NULL))
|
||||
!boot_cpu_has(X86_FEATURE_PCLMULQDQ))
|
||||
return 0;
|
||||
err = crypto_register_skciphers(skcipher_algs_vaes_avx2,
|
||||
ARRAY_SIZE(skcipher_algs_vaes_avx2));
|
||||
|
|
@ -1562,9 +1561,7 @@ static int __init register_avx_algs(void)
|
|||
|
||||
if (!boot_cpu_has(X86_FEATURE_AVX512BW) ||
|
||||
!boot_cpu_has(X86_FEATURE_AVX512VL) ||
|
||||
!boot_cpu_has(X86_FEATURE_BMI2) ||
|
||||
!cpu_has_xfeatures(XFEATURE_MASK_SSE | XFEATURE_MASK_YMM |
|
||||
XFEATURE_MASK_AVX512, NULL))
|
||||
!boot_cpu_has(X86_FEATURE_BMI2))
|
||||
return 0;
|
||||
|
||||
if (boot_cpu_has(X86_FEATURE_PREFER_YMM)) {
|
||||
|
|
|
|||
|
|
@ -195,22 +195,13 @@ static struct skcipher_alg aria_algs[] = {
|
|||
|
||||
static int __init aria_avx2_init(void)
|
||||
{
|
||||
const char *feature_name;
|
||||
|
||||
if (!boot_cpu_has(X86_FEATURE_AVX) ||
|
||||
!boot_cpu_has(X86_FEATURE_AVX2) ||
|
||||
!boot_cpu_has(X86_FEATURE_AES) ||
|
||||
!boot_cpu_has(X86_FEATURE_OSXSAVE)) {
|
||||
!boot_cpu_has(X86_FEATURE_AES)) {
|
||||
pr_info("AVX2 or AES-NI instructions are not detected.\n");
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
if (!cpu_has_xfeatures(XFEATURE_MASK_SSE | XFEATURE_MASK_YMM,
|
||||
&feature_name)) {
|
||||
pr_info("CPU feature '%s' is not supported.\n", feature_name);
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
if (boot_cpu_has(X86_FEATURE_GFNI)) {
|
||||
aria_ops.aria_encrypt_16way = aria_aesni_avx_gfni_encrypt_16way;
|
||||
aria_ops.aria_decrypt_16way = aria_aesni_avx_gfni_decrypt_16way;
|
||||
|
|
|
|||
|
|
@ -182,21 +182,12 @@ static struct skcipher_alg aria_algs[] = {
|
|||
|
||||
static int __init aria_avx_init(void)
|
||||
{
|
||||
const char *feature_name;
|
||||
|
||||
if (!boot_cpu_has(X86_FEATURE_AVX) ||
|
||||
!boot_cpu_has(X86_FEATURE_AES) ||
|
||||
!boot_cpu_has(X86_FEATURE_OSXSAVE)) {
|
||||
!boot_cpu_has(X86_FEATURE_AES)) {
|
||||
pr_info("AVX or AES-NI instructions are not detected.\n");
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
if (!cpu_has_xfeatures(XFEATURE_MASK_SSE | XFEATURE_MASK_YMM,
|
||||
&feature_name)) {
|
||||
pr_info("CPU feature '%s' is not supported.\n", feature_name);
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
if (boot_cpu_has(X86_FEATURE_GFNI)) {
|
||||
aria_ops.aria_encrypt_16way = aria_aesni_avx_gfni_encrypt_16way;
|
||||
aria_ops.aria_decrypt_16way = aria_aesni_avx_gfni_decrypt_16way;
|
||||
|
|
|
|||
|
|
@ -196,24 +196,15 @@ static struct skcipher_alg aria_algs[] = {
|
|||
|
||||
static int __init aria_avx512_init(void)
|
||||
{
|
||||
const char *feature_name;
|
||||
|
||||
if (!boot_cpu_has(X86_FEATURE_AVX) ||
|
||||
!boot_cpu_has(X86_FEATURE_AVX2) ||
|
||||
!boot_cpu_has(X86_FEATURE_AVX512F) ||
|
||||
!boot_cpu_has(X86_FEATURE_AVX512VL) ||
|
||||
!boot_cpu_has(X86_FEATURE_GFNI) ||
|
||||
!boot_cpu_has(X86_FEATURE_OSXSAVE)) {
|
||||
!boot_cpu_has(X86_FEATURE_GFNI)) {
|
||||
pr_info("AVX512/GFNI instructions are not detected.\n");
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
if (!cpu_has_xfeatures(XFEATURE_MASK_SSE | XFEATURE_MASK_YMM |
|
||||
XFEATURE_MASK_AVX512, &feature_name)) {
|
||||
pr_info("CPU feature '%s' is not supported.\n", feature_name);
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
aria_ops.aria_encrypt_16way = aria_aesni_avx_gfni_encrypt_16way;
|
||||
aria_ops.aria_decrypt_16way = aria_aesni_avx_gfni_decrypt_16way;
|
||||
aria_ops.aria_ctr_crypt_16way = aria_aesni_avx_gfni_ctr_crypt_16way;
|
||||
|
|
|
|||
|
|
@ -97,22 +97,13 @@ static struct skcipher_alg camellia_algs[] = {
|
|||
|
||||
static int __init camellia_aesni_init(void)
|
||||
{
|
||||
const char *feature_name;
|
||||
|
||||
if (!boot_cpu_has(X86_FEATURE_AVX) ||
|
||||
!boot_cpu_has(X86_FEATURE_AVX2) ||
|
||||
!boot_cpu_has(X86_FEATURE_AES) ||
|
||||
!boot_cpu_has(X86_FEATURE_OSXSAVE)) {
|
||||
!boot_cpu_has(X86_FEATURE_AES)) {
|
||||
pr_info("AVX2 or AES-NI instructions are not detected.\n");
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
if (!cpu_has_xfeatures(XFEATURE_MASK_SSE | XFEATURE_MASK_YMM,
|
||||
&feature_name)) {
|
||||
pr_info("CPU feature '%s' is not supported.\n", feature_name);
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
return crypto_register_skciphers(camellia_algs,
|
||||
ARRAY_SIZE(camellia_algs));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -98,21 +98,12 @@ static struct skcipher_alg camellia_algs[] = {
|
|||
|
||||
static int __init camellia_aesni_init(void)
|
||||
{
|
||||
const char *feature_name;
|
||||
|
||||
if (!boot_cpu_has(X86_FEATURE_AVX) ||
|
||||
!boot_cpu_has(X86_FEATURE_AES) ||
|
||||
!boot_cpu_has(X86_FEATURE_OSXSAVE)) {
|
||||
!boot_cpu_has(X86_FEATURE_AES)) {
|
||||
pr_info("AVX or AES-NI instructions are not detected.\n");
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
if (!cpu_has_xfeatures(XFEATURE_MASK_SSE | XFEATURE_MASK_YMM,
|
||||
&feature_name)) {
|
||||
pr_info("CPU feature '%s' is not supported.\n", feature_name);
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
return crypto_register_skciphers(camellia_algs,
|
||||
ARRAY_SIZE(camellia_algs));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -92,11 +92,8 @@ static struct skcipher_alg cast5_algs[] = {
|
|||
|
||||
static int __init cast5_init(void)
|
||||
{
|
||||
const char *feature_name;
|
||||
|
||||
if (!cpu_has_xfeatures(XFEATURE_MASK_SSE | XFEATURE_MASK_YMM,
|
||||
&feature_name)) {
|
||||
pr_info("CPU feature '%s' is not supported.\n", feature_name);
|
||||
if (!boot_cpu_has(X86_FEATURE_AVX)) {
|
||||
pr_info("AVX instructions are not detected.\n");
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -92,11 +92,8 @@ static struct skcipher_alg cast6_algs[] = {
|
|||
|
||||
static int __init cast6_init(void)
|
||||
{
|
||||
const char *feature_name;
|
||||
|
||||
if (!cpu_has_xfeatures(XFEATURE_MASK_SSE | XFEATURE_MASK_YMM,
|
||||
&feature_name)) {
|
||||
pr_info("CPU feature '%s' is not supported.\n", feature_name);
|
||||
if (!boot_cpu_has(X86_FEATURE_AVX)) {
|
||||
pr_info("AVX instructions are not detected.\n");
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -93,17 +93,10 @@ static struct skcipher_alg serpent_algs[] = {
|
|||
|
||||
static int __init serpent_avx2_init(void)
|
||||
{
|
||||
const char *feature_name;
|
||||
|
||||
if (!boot_cpu_has(X86_FEATURE_AVX2) || !boot_cpu_has(X86_FEATURE_OSXSAVE)) {
|
||||
if (!boot_cpu_has(X86_FEATURE_AVX2)) {
|
||||
pr_info("AVX2 instructions are not detected.\n");
|
||||
return -ENODEV;
|
||||
}
|
||||
if (!cpu_has_xfeatures(XFEATURE_MASK_SSE | XFEATURE_MASK_YMM,
|
||||
&feature_name)) {
|
||||
pr_info("CPU feature '%s' is not supported.\n", feature_name);
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
return crypto_register_skciphers(serpent_algs,
|
||||
ARRAY_SIZE(serpent_algs));
|
||||
|
|
|
|||
|
|
@ -100,11 +100,8 @@ static struct skcipher_alg serpent_algs[] = {
|
|||
|
||||
static int __init serpent_init(void)
|
||||
{
|
||||
const char *feature_name;
|
||||
|
||||
if (!cpu_has_xfeatures(XFEATURE_MASK_SSE | XFEATURE_MASK_YMM,
|
||||
&feature_name)) {
|
||||
pr_info("CPU feature '%s' is not supported.\n", feature_name);
|
||||
if (!boot_cpu_has(X86_FEATURE_AVX)) {
|
||||
pr_info("AVX instructions are not detected.\n");
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -98,22 +98,13 @@ static struct skcipher_alg sm4_aesni_avx2_skciphers[] = {
|
|||
|
||||
static int __init sm4_init(void)
|
||||
{
|
||||
const char *feature_name;
|
||||
|
||||
if (!boot_cpu_has(X86_FEATURE_AVX) ||
|
||||
!boot_cpu_has(X86_FEATURE_AVX2) ||
|
||||
!boot_cpu_has(X86_FEATURE_AES) ||
|
||||
!boot_cpu_has(X86_FEATURE_OSXSAVE)) {
|
||||
!boot_cpu_has(X86_FEATURE_AES)) {
|
||||
pr_info("AVX2 or AES-NI instructions are not detected.\n");
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
if (!cpu_has_xfeatures(XFEATURE_MASK_SSE | XFEATURE_MASK_YMM,
|
||||
&feature_name)) {
|
||||
pr_info("CPU feature '%s' is not supported.\n", feature_name);
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
return crypto_register_skciphers(sm4_aesni_avx2_skciphers,
|
||||
ARRAY_SIZE(sm4_aesni_avx2_skciphers));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -314,21 +314,12 @@ static struct skcipher_alg sm4_aesni_avx_skciphers[] = {
|
|||
|
||||
static int __init sm4_init(void)
|
||||
{
|
||||
const char *feature_name;
|
||||
|
||||
if (!boot_cpu_has(X86_FEATURE_AVX) ||
|
||||
!boot_cpu_has(X86_FEATURE_AES) ||
|
||||
!boot_cpu_has(X86_FEATURE_OSXSAVE)) {
|
||||
!boot_cpu_has(X86_FEATURE_AES)) {
|
||||
pr_info("AVX or AES-NI instructions are not detected.\n");
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
if (!cpu_has_xfeatures(XFEATURE_MASK_SSE | XFEATURE_MASK_YMM,
|
||||
&feature_name)) {
|
||||
pr_info("CPU feature '%s' is not supported.\n", feature_name);
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
return crypto_register_skciphers(sm4_aesni_avx_skciphers,
|
||||
ARRAY_SIZE(sm4_aesni_avx_skciphers));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -102,10 +102,8 @@ static struct skcipher_alg twofish_algs[] = {
|
|||
|
||||
static int __init twofish_init(void)
|
||||
{
|
||||
const char *feature_name;
|
||||
|
||||
if (!cpu_has_xfeatures(XFEATURE_MASK_SSE | XFEATURE_MASK_YMM, &feature_name)) {
|
||||
pr_info("CPU feature '%s' is not supported.\n", feature_name);
|
||||
if (!boot_cpu_has(X86_FEATURE_AVX)) {
|
||||
pr_info("AVX instructions are not detected.\n");
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user