Turn off pointless P-state invariant TSC detection based on CPU model

on a virtual machine.
This commit is contained in:
Jung-uk Kim 2011-03-10 23:06:13 +00:00
parent cd67ac41ae
commit a106a27c6a
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=219469

View file

@ -105,20 +105,23 @@ init_TSC(void)
switch (cpu_vendor_id) {
case CPU_VENDOR_AMD:
if ((amd_pminfo & AMDPM_TSC_INVARIANT) ||
CPUID_TO_FAMILY(cpu_id) >= 0x10)
if ((amd_pminfo & AMDPM_TSC_INVARIANT) != 0 ||
(vm_guest == VM_GUEST_NO &&
CPUID_TO_FAMILY(cpu_id) >= 0x10))
tsc_is_invariant = 1;
break;
case CPU_VENDOR_INTEL:
if ((amd_pminfo & AMDPM_TSC_INVARIANT) ||
(CPUID_TO_FAMILY(cpu_id) == 0x6 &&
if ((amd_pminfo & AMDPM_TSC_INVARIANT) != 0 ||
(vm_guest == VM_GUEST_NO &&
((CPUID_TO_FAMILY(cpu_id) == 0x6 &&
CPUID_TO_MODEL(cpu_id) >= 0xe) ||
(CPUID_TO_FAMILY(cpu_id) == 0xf &&
CPUID_TO_MODEL(cpu_id) >= 0x3))
CPUID_TO_MODEL(cpu_id) >= 0x3))))
tsc_is_invariant = 1;
break;
case CPU_VENDOR_CENTAUR:
if (CPUID_TO_FAMILY(cpu_id) == 0x6 &&
if (vm_guest == VM_GUEST_NO &&
CPUID_TO_FAMILY(cpu_id) == 0x6 &&
CPUID_TO_MODEL(cpu_id) >= 0xf &&
(rdmsr(0x1203) & 0x100000000ULL) == 0)
tsc_is_invariant = 1;