diff options
-rw-r--r-- | src/cpu/intel/common/hyperthreading.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/src/cpu/intel/common/hyperthreading.c b/src/cpu/intel/common/hyperthreading.c index fce7576673..b9c17b6fa1 100644 --- a/src/cpu/intel/common/hyperthreading.c +++ b/src/cpu/intel/common/hyperthreading.c @@ -23,6 +23,14 @@ bool intel_ht_sibling(void) if (!intel_ht_supported()) return false; + if (is_x2apic_mode()) { + if (cpuid_eax(0) >= 0xb) { + result = cpuid_ext(0xb, 0); + const uint32_t div = 1 << (result.eax & 0x1f); + return result.edx % div > 0; + } + } + apic_ids = 1; if (cpuid_eax(0) >= 1) apic_ids = (cpuid_ebx(1) >> 16) & 0xff; |