diff options
author | vboxsync <vboxsync@cfe28804-0f27-0410-a406-dd0f0b0b656f> | 2018-07-31 10:29:21 +0000 |
---|---|---|
committer | vboxsync <vboxsync@cfe28804-0f27-0410-a406-dd0f0b0b656f> | 2018-07-31 10:29:21 +0000 |
commit | 2aea56157ad1164a97657d55f46b0338f19319bf (patch) | |
tree | a4eb2ae5f6bbc81d81457e1c273da58016b19269 /src | |
parent | 4ac5d930ab780d20f9af9c0e5939b482e8bc708c (diff) | |
download | VirtualBox-svn-2aea56157ad1164a97657d55f46b0338f19319bf.tar.gz |
VMM: Nested VMX: bugref:9180 Implement MSR_IA32_VMX_VMCS_ENUM.
git-svn-id: https://www.virtualbox.org/svn/vbox/trunk@73406 cfe28804-0f27-0410-a406-dd0f0b0b656f
Diffstat (limited to 'src')
-rw-r--r-- | src/VBox/VMM/VMMAll/CPUMAllMsrs.cpp | 18 |
1 files changed, 11 insertions, 7 deletions
diff --git a/src/VBox/VMM/VMMAll/CPUMAllMsrs.cpp b/src/VBox/VMM/VMMAll/CPUMAllMsrs.cpp index 91b01a956a2..002aadaa3d2 100644 --- a/src/VBox/VMM/VMMAll/CPUMAllMsrs.cpp +++ b/src/VBox/VMM/VMMAll/CPUMAllMsrs.cpp @@ -1294,7 +1294,7 @@ static DECLCALLBACK(VBOXSTRICTRC) cpumMsrRd_Ia32VmxBasic(PVMCPU pVCpu, uint32_t PCCPUMFEATURES pGuestFeatures = &pVCpu->CTX_SUFF(pVM)->cpum.s.GuestFeatures; if (pGuestFeatures->fVmx) { - *puValue = RT_BF_MAKE(VMX_BF_BASIC_VMCS_ID, VMX_E_VMCS_REVISION_ID ) + *puValue = RT_BF_MAKE(VMX_BF_BASIC_VMCS_ID, VMX_V_VMCS_REVISION_ID ) | RT_BF_MAKE(VMX_BF_BASIC_DUAL_MON, 0 ) | RT_BF_MAKE(VMX_BF_BASIC_VMCS_MEM_TYPE, VMX_BASIC_MEM_TYPE_WB ) | RT_BF_MAKE(VMX_BF_BASIC_VMCS_INS_OUTS, pGuestFeatures->fVmxInsOutInfo) @@ -1439,7 +1439,7 @@ static DECLCALLBACK(VBOXSTRICTRC) cpumMsrRd_Ia32VmxCr0Fixed0(PVMCPU pVCpu, uint3 RT_NOREF_PV(idMsr); RT_NOREF_PV(pRange); PCCPUMFEATURES pGuestFeatures = &pVCpu->CTX_SUFF(pVM)->cpum.s.GuestFeatures; if (pGuestFeatures->fVmx) - *puValue = VMX_E_CR0_FIXED0; + *puValue = VMX_V_CR0_FIXED0; else *puValue = 0; return VINF_SUCCESS; @@ -1455,7 +1455,7 @@ static DECLCALLBACK(VBOXSTRICTRC) cpumMsrRd_Ia32VmxCr0Fixed1(PVMCPU pVCpu, uint3 { int rc = HMVmxGetHostMsr(pVCpu->CTX_SUFF(pVM), idMsr, puValue); AssertRCReturn(rc, rc); - *puValue |= VMX_E_CR0_FIXED0; /* Make sure the CR0 MB1 bits are not clear. */ + *puValue |= VMX_V_CR0_FIXED0; /* Make sure the CR0 MB1 bits are not clear. */ } else *puValue = 0; @@ -1469,7 +1469,7 @@ static DECLCALLBACK(VBOXSTRICTRC) cpumMsrRd_Ia32VmxCr4Fixed0(PVMCPU pVCpu, uint3 RT_NOREF_PV(idMsr); RT_NOREF_PV(pRange); PCCPUMFEATURES pGuestFeatures = &pVCpu->CTX_SUFF(pVM)->cpum.s.GuestFeatures; if (pGuestFeatures->fVmx) - *puValue = VMX_E_CR4_FIXED0; + *puValue = VMX_V_CR4_FIXED0; else *puValue = 0; return VINF_SUCCESS; @@ -1485,7 +1485,7 @@ static DECLCALLBACK(VBOXSTRICTRC) cpumMsrRd_Ia32VmxCr4Fixed1(PVMCPU pVCpu, uint3 { int rc = HMVmxGetHostMsr(pVCpu->CTX_SUFF(pVM), idMsr, puValue); AssertRCReturn(rc, rc); - *puValue |= VMX_E_CR4_FIXED0; /* Make sure the CR4 MB1 bits are not clear. */ + *puValue |= VMX_V_CR4_FIXED0; /* Make sure the CR4 MB1 bits are not clear. */ } else *puValue = 0; @@ -1496,8 +1496,12 @@ static DECLCALLBACK(VBOXSTRICTRC) cpumMsrRd_Ia32VmxCr4Fixed1(PVMCPU pVCpu, uint3 /** @callback_method_impl{FNCPUMRDMSR} */ static DECLCALLBACK(VBOXSTRICTRC) cpumMsrRd_Ia32VmxVmcsEnum(PVMCPU pVCpu, uint32_t idMsr, PCCPUMMSRRANGE pRange, uint64_t *puValue) { - RT_NOREF_PV(pVCpu); RT_NOREF_PV(idMsr); RT_NOREF_PV(pRange); - *puValue = 0; + RT_NOREF_PV(idMsr); RT_NOREF_PV(pRange); + PCCPUMFEATURES pGuestFeatures = &pVCpu->CTX_SUFF(pVM)->cpum.s.GuestFeatures; + if (pGuestFeatures->fVmx) + *puValue = VMX_V_VMCS_MAX_INDEX << VMX_BF_VMCS_ENUM_HIGHEST_IDX_SHIFT; + else + *puValue = 0; return VINF_SUCCESS; } |