x86: Incorrect CPUID leaf in Zen 5 detection
HMBSbige
hl3 at proton.me
Thu Oct 8 11:22:26 CEST 2026
Hi,
The AVX512_BMM check in src/hwf-x86.c has two errors:
1. The leaf should be 0x80000021, not 0x21.
2. The availability check should use the maximum extended leaf
returned by CPUID(0x80000000).EAX, not the maximum basic leaf
from CPUID(0).EAX. The file currently never queries 0x80000000.
The minimal fix would be:
unsigned int max_ext_level, amd_feat;
get_cpuid(0x80000000, &max_ext_level, NULL, NULL, NULL);
if (max_ext_level >= 0x80000021)
{
get_cpuid(0x80000021, &amd_feat, NULL, NULL, NULL);
if (amd_feat & (1 << 23))
has_avx512bmm = 1;
}
Alternatively, I suggest identifying Zen 5 directly by vendor,
family and model. Family 0x1A also includes Zen 6, so the absence
of AVX512_BMM is not sufficient to identify Zen 5.
Following Linux's classification in arch/x86/kernel/cpu/amd.c,
the Zen 5 condition would be:
if (is_amd_cpu && family == 0x1a
&& (model <= 0x2f
|| (model >= 0x40 && model <= 0x4f)
|| (model >= 0x60 && model <= 0x7f)
|| (model >= 0xd0 && model <= 0xd7)))
{
cpu_details->int_vector_latency = 2;
cpu_details->prefer_gpr_over_scalar_int_vector = 1;
}
This reuses the already decoded family/model and eliminates the
AVX512_BMM probe. Unknown models would retain the default tuning
until evaluated.
Best regards,
Bruce
More information about the Gcrypt-devel
mailing list