svn commit: r364343 - in head/sys: amd64/amd64 amd64/vmm/intel i386/i386 x86/include
Peter Grehan
grehan at FreeBSD.org
Tue Aug 18 11:36:39 UTC 2020
Author: grehan
Date: Tue Aug 18 11:36:38 2020
New Revision: 364343
URL: https://svnweb.freebsd.org/changeset/base/364343
Log:
Export a routine to provide the TSC_AUX MSR value and use this in vmm.
Also, drop an unnecessary set of braces.
Requested by: kib
Reviewed by: kib
MFC after: 3 weeks
Modified:
head/sys/amd64/amd64/initcpu.c
head/sys/amd64/vmm/intel/vmx_msr.c
head/sys/i386/i386/initcpu.c
head/sys/x86/include/x86_var.h
Modified: head/sys/amd64/amd64/initcpu.c
==============================================================================
--- head/sys/amd64/amd64/initcpu.c Tue Aug 18 10:30:55 2020 (r364342)
+++ head/sys/amd64/amd64/initcpu.c Tue Aug 18 11:36:38 2020 (r364343)
@@ -218,6 +218,15 @@ init_via(void)
}
/*
+ * The value for the TSC_AUX MSR and rdtscp/rdpid.
+ */
+u_int
+cpu_auxmsr(void)
+{
+ return (PCPU_GET(cpuid));
+}
+
+/*
* Initialize CPU control registers
*/
void
@@ -283,7 +292,7 @@ initializecpu(void)
if ((amd_feature & AMDID_RDTSCP) != 0 ||
(cpu_stdext_feature2 & CPUID_STDEXT2_RDPID) != 0)
- wrmsr(MSR_TSC_AUX, PCPU_GET(cpuid));
+ wrmsr(MSR_TSC_AUX, cpu_auxmsr());
}
void
Modified: head/sys/amd64/vmm/intel/vmx_msr.c
==============================================================================
--- head/sys/amd64/vmm/intel/vmx_msr.c Tue Aug 18 10:30:55 2020 (r364342)
+++ head/sys/amd64/vmm/intel/vmx_msr.c Tue Aug 18 11:36:38 2020 (r364343)
@@ -365,9 +365,9 @@ void
vmx_msr_guest_enter_tsc_aux(struct vmx *vmx, int vcpuid)
{
uint64_t guest_tsc_aux = vmx->guest_msrs[vcpuid][IDX_MSR_TSC_AUX];
- uint32_t cpuid = PCPU_GET(cpuid);
+ uint32_t host_aux = cpu_auxmsr();
- if (vmx_have_msr_tsc_aux(vmx) && (guest_tsc_aux != cpuid))
+ if (vmx_have_msr_tsc_aux(vmx) && guest_tsc_aux != host_aux)
wrmsr(MSR_TSC_AUX, guest_tsc_aux);
}
@@ -396,9 +396,9 @@ void
vmx_msr_guest_exit_tsc_aux(struct vmx *vmx, int vcpuid)
{
uint64_t guest_tsc_aux = vmx->guest_msrs[vcpuid][IDX_MSR_TSC_AUX];
- uint32_t cpuid = PCPU_GET(cpuid);
+ uint32_t host_aux = cpu_auxmsr();
- if (vmx_have_msr_tsc_aux(vmx) && (guest_tsc_aux != cpuid))
+ if (vmx_have_msr_tsc_aux(vmx) && guest_tsc_aux != host_aux)
/*
* Note that it is not necessary to save the guest value
* here; vmx->guest_msrs[vcpuid][IDX_MSR_TSC_AUX] always
@@ -406,7 +406,7 @@ vmx_msr_guest_exit_tsc_aux(struct vmx *vmx, int vcpuid
* the guest writes to it (which is expected to be very
* rare).
*/
- wrmsr(MSR_TSC_AUX, cpuid);
+ wrmsr(MSR_TSC_AUX, host_aux);
}
int
Modified: head/sys/i386/i386/initcpu.c
==============================================================================
--- head/sys/i386/i386/initcpu.c Tue Aug 18 10:30:55 2020 (r364342)
+++ head/sys/i386/i386/initcpu.c Tue Aug 18 11:36:38 2020 (r364343)
@@ -627,6 +627,15 @@ init_transmeta(void)
}
#endif
+/*
+ * The value for the TSC_AUX MSR and rdtscp/rdpid.
+ */
+u_int
+cpu_auxmsr(void)
+{
+ return (PCPU_GET(cpuid));
+}
+
extern int elf32_nxstack;
void
@@ -751,7 +760,7 @@ initializecpu(void)
}
if ((amd_feature & AMDID_RDTSCP) != 0 ||
(cpu_stdext_feature2 & CPUID_STDEXT2_RDPID) != 0)
- wrmsr(MSR_TSC_AUX, PCPU_GET(cpuid));
+ wrmsr(MSR_TSC_AUX, cpu_auxmsr());
}
void
Modified: head/sys/x86/include/x86_var.h
==============================================================================
--- head/sys/x86/include/x86_var.h Tue Aug 18 10:30:55 2020 (r364342)
+++ head/sys/x86/include/x86_var.h Tue Aug 18 11:36:38 2020 (r364343)
@@ -115,6 +115,7 @@ typedef void alias_for_inthand_t(void);
bool acpi_get_fadt_bootflags(uint16_t *flagsp);
void *alloc_fpusave(int flags);
void busdma_swi(void);
+u_int cpu_auxmsr(void);
vm_paddr_t cpu_getmaxphyaddr(void);
bool cpu_mwait_usable(void);
void cpu_probe_amdc1e(void);
More information about the svn-src-head
mailing list