x86: switch kernel TSC timecounter to RDTSCP on AMD Zen CPUs
Reported by: many Tested by: gallatin, mikael, rhurlin MFC after: 1 week Sponsored by: The FreeBSD Foundation
This commit is contained in:
parent
f7d181543f
commit
9f47eeffa3
@ -633,19 +633,12 @@ init_TSC_tc(void)
|
||||
|
||||
/*
|
||||
* Timecounter implementation selection, top to bottom:
|
||||
* - For AMD Zens and newer, use LFENCE;RDTSC.
|
||||
* - If RDTSCP is available, use RDTSCP.
|
||||
* - If fence instructions are provided (SSE2), use LFENCE;RDTSC
|
||||
* on Intel, and MFENCE;RDTSC on AMD.
|
||||
* - For really old CPUs, just use RDTSC.
|
||||
*/
|
||||
if ((cpu_vendor_id == CPU_VENDOR_AMD ||
|
||||
cpu_vendor_id == CPU_VENDOR_HYGON) &&
|
||||
CPUID_TO_FAMILY(cpu_id) >= 0x17) {
|
||||
tsc_timecounter.tc_get_timecount = shift > 0 ?
|
||||
tsc_get_timecount_low_lfence :
|
||||
tsc_get_timecount_lfence;
|
||||
} else if ((amd_feature & AMDID_RDTSCP) != 0) {
|
||||
if ((amd_feature & AMDID_RDTSCP) != 0) {
|
||||
tsc_timecounter.tc_get_timecount = shift > 0 ?
|
||||
tscp_get_timecount_low : tscp_get_timecount;
|
||||
} else if ((cpu_feature & CPUID_SSE2) != 0 && mp_ncpus > 1) {
|
||||
|
Loading…
Reference in New Issue
Block a user