[email protected] (Christof Meerwald) writes:
>Turns out in my case the CPUID_HTT flag is not set (so lp_max = 1),
>but the maximum number of cores per package is set to 16 - 1, so
>core_max = 16.
That's a confusing number, the chip has 14 cores and 28 threads.
If HTT is disabled, that would still be only 14 threads. So
I guess, the VM software fakes these values.
>but we don't check for that condition in the Intel case - should we?
>Adding that case for Intel seems to fix it for me, e.g.
> /* Check for leaf 4 support. */
> if (ci->ci_max_cpuid >= 4 &&
> (ci->ci_feat_val[0] & CPUID_HTT) != 0) {
> /* Maximum number of Cores per package (eax[31:26]). */
> x86_cpuid2(4, 0, descs);
> core_max = __SHIFTOUT(descs[0], CPUID_DCP_CORE_P_PKG)
> + 1;
> } else {
> core_max = 1;
> }
Wouldn't that tell that we only have 1 core / 1 thread ?
Maybe instead of failing when lp_max < core_max, we should just
gracefully handle this case as lp_max == core_max.