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);
_______________________________________________
[email protected] mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "[email protected]"

Reply via email to