Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 18 Aug 2020 11:36:38 +0000 (UTC)
From:      Peter Grehan <grehan@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r364343 - in head/sys: amd64/amd64 amd64/vmm/intel i386/i386 x86/include
Message-ID:  <202008181136.07IBacAf099282@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
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);



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202008181136.07IBacAf099282>