Detect CPU type before asking VMWare for TSC freq

This allows us to set tsc_is_invariant and select appropriately
fenced versions of RDTSC based on the CPU type.

Reviewed by:	markj
Sponsored by:	https://www.patreon.com/cperciva
This commit is contained in:
Colin Percival 2022-01-03 23:00:39 -08:00
parent a727d9531a
commit fd980feb57

View File

@ -134,7 +134,6 @@ tsc_freq_vmware(void)
if (regs[1] != UINT_MAX)
tsc_freq = regs[0] | ((uint64_t)regs[1] << 32);
}
tsc_is_invariant = 1;
tsc_early_calib_exact = 1;
}
@ -268,11 +267,6 @@ probe_tsc_freq(void)
tsc_perf_stat = 1;
}
if (vm_guest == VM_GUEST_VMWARE) {
tsc_freq_vmware();
return;
}
switch (cpu_vendor_id) {
case CPU_VENDOR_AMD:
case CPU_VENDOR_HYGON:
@ -311,6 +305,11 @@ probe_tsc_freq(void)
break;
}
if (vm_guest == VM_GUEST_VMWARE) {
tsc_freq_vmware();
return;
}
if (tsc_freq_cpuid(&tsc_freq)) {
/*
* If possible, use the value obtained from CPUID as the initial