VirtualBox

Changeset 46379 in vbox


Ignore:
Timestamp:
Jun 4, 2013 1:01:04 PM (12 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
86199
Message:

VMM/HMVMXR0: Added VMFUNC feature recognition.

Location:
trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/include/VBox/vmm/hm_vmx.h

    r46378 r46379  
    805805/** Highest field index. */
    806806#define MSR_IA32_VMX_VMCS_ENUM_HIGHEST_INDEX(a)                 (((a) >> 1) & 0x1FF)
    807 
    808807/** @} */
    809808
     
    11281127/** @} */
    11291128
     1129
     1130/** @name VMX_VMCS_CTRL_VMFUNC
     1131 * @{
     1132 */
     1133/** EPTP-switching function changes the value of the EPTP to one chosen from the EPTP list. */
     1134#define VMX_VMCS_CTRL_VMFUNC_EPTP_SWITCHING            RT_BIT_64(0)
     1135/** @} */
     1136
     1137
    11301138/**  @name VMCS field encoding - 32 Bits read-only fields
    11311139 * @{
  • trunk/src/VBox/VMM/VMMR0/HMR0.cpp

    r46363 r46379  
    136136            uint64_t                vmx_cr4_fixed1;
    137137            uint64_t                vmx_vmcs_enum;
     138            uint64_t                vmx_vmfunc;
    138139            uint64_t                vmx_ept_vpid_caps;
    139140        } msr;
     
    429430                        g_HvmR0.vmx.msr.vmx_ept_vpid_caps = ASMRdMsr(MSR_IA32_VMX_EPT_VPID_CAP);
    430431                    }
     432
     433                    if (g_HvmR0.vmx.msr.vmx_proc_ctls2.n.allowed1 & VMX_VMCS_CTRL_PROC_EXEC2_VMFUNC)
     434                        g_HvmR0.vmx.msr.vmx_vmfunc        = ASMRdMsr(MSR_IA32_VMX_VMFUNC);
    431435                }
    432436
     
    12531257    pVM->hm.s.vmx.msr.vmx_cr4_fixed1    = g_HvmR0.vmx.msr.vmx_cr4_fixed1;
    12541258    pVM->hm.s.vmx.msr.vmx_vmcs_enum     = g_HvmR0.vmx.msr.vmx_vmcs_enum;
     1259    pVM->hm.s.vmx.msr.vmx_vmfunc        = g_HvmR0.vmx.msr.vmx_vmfunc;
    12551260    pVM->hm.s.vmx.msr.vmx_ept_vpid_caps = g_HvmR0.vmx.msr.vmx_ept_vpid_caps;
    12561261    pVM->hm.s.svm.msrHwcr               = g_HvmR0.svm.msrHwcr;
  • trunk/src/VBox/VMM/VMMR3/HM.cpp

    r46378 r46379  
    284284    } while (0)
    285285
     286#define HMVMX_REPORT_ALLOWED_FEATURE(allowed1, featflag) \
     287    do { \
     288        if ((allowed1) & (featflag)) \
     289            LogRel(("HM:    " #featflag "\n")); \
     290        else \
     291            LogRel(("HM:    " #featflag " not supported\n")); \
     292    } while (0)
     293
    286294#define HMVMX_REPORT_CAPABILITY(msrcaps, cap) \
    287295    do { \
     
    10991107    LogRel(("HM:    MSR_IA32_VMX_MISC_MSEG_ID                = %x\n", MSR_IA32_VMX_MISC_MSEG_ID(pVM->hm.s.vmx.msr.vmx_misc)));
    11001108
     1109    /* Paranoia */
     1110    AssertRelease(MSR_IA32_VMX_MISC_MAX_MSR(pVM->hm.s.vmx.msr.vmx_misc) >= 512);
     1111
    11011112    LogRel(("HM: MSR_IA32_VMX_CR0_FIXED0       = %RX64\n", pVM->hm.s.vmx.msr.vmx_cr0_fixed0));
    11021113    LogRel(("HM: MSR_IA32_VMX_CR0_FIXED1       = %RX64\n", pVM->hm.s.vmx.msr.vmx_cr0_fixed1));
     
    11041115    LogRel(("HM: MSR_IA32_VMX_CR4_FIXED1       = %RX64\n", pVM->hm.s.vmx.msr.vmx_cr4_fixed1));
    11051116    LogRel(("HM: MSR_IA32_VMX_VMCS_ENUM        = %RX64\n", pVM->hm.s.vmx.msr.vmx_vmcs_enum));
     1117    LogRel(("HM:    MSR_IA32_VMX_VMCS_ENUM_HIGHEST_INDEX     = %x\n", MSR_IA32_VMX_VMCS_ENUM_HIGHEST_INDEX(pVM->hm.s.vmx.msr.vmx_vmcs_enum)));
     1118
     1119    val = pVM->hm.s.vmx.msr.vmx_vmfunc;
     1120    if (val)
     1121    {
     1122        LogRel(("HM: MSR_A32_VMX_VMFUNC            = %RX64\n", val));
     1123        HMVMX_REPORT_ALLOWED_FEATURE(val, VMX_VMCS_CTRL_VMFUNC_EPTP_SWITCHING);
     1124    }
    11061125
    11071126    LogRel(("HM: APIC-access page physaddr     = %RHp\n", pVM->hm.s.vmx.HCPhysApicAccess));
    1108 
    1109     /* Paranoia */
    1110     AssertRelease(MSR_IA32_VMX_MISC_MAX_MSR(pVM->hm.s.vmx.msr.vmx_misc) >= 512);
    11111127
    11121128    for (VMCPUID i = 0; i < pVM->cCpus; i++)
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette