diff options
author | vboxsync <vboxsync@cfe28804-0f27-0410-a406-dd0f0b0b656f> | 2018-07-20 15:40:10 +0000 |
---|---|---|
committer | vboxsync <vboxsync@cfe28804-0f27-0410-a406-dd0f0b0b656f> | 2018-07-20 15:40:10 +0000 |
commit | a9683139f1d1e5a274ec30051c0f03d7d40097d5 (patch) | |
tree | e82bb533366d462d9f9385fa081fb42054217999 /src/VBox/VMM/VMMAll/CPUMAllMsrs.cpp | |
parent | 7acda010504379617bcfd6fbadbe0ac34a746e6c (diff) | |
download | VirtualBox-svn-a9683139f1d1e5a274ec30051c0f03d7d40097d5.tar.gz |
VMM: Nested VMX: bugref:9180 Reports bits of IA32_FEATURE_CONTROL, start implementing IA32_VMX_BASIC MSRs, cleanups.
git-svn-id: https://www.virtualbox.org/svn/vbox/trunk@73274 cfe28804-0f27-0410-a406-dd0f0b0b656f
Diffstat (limited to 'src/VBox/VMM/VMMAll/CPUMAllMsrs.cpp')
-rw-r--r-- | src/VBox/VMM/VMMAll/CPUMAllMsrs.cpp | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/src/VBox/VMM/VMMAll/CPUMAllMsrs.cpp b/src/VBox/VMM/VMMAll/CPUMAllMsrs.cpp index 3bdb40e5d04..bfc135843fc 100644 --- a/src/VBox/VMM/VMMAll/CPUMAllMsrs.cpp +++ b/src/VBox/VMM/VMMAll/CPUMAllMsrs.cpp @@ -23,6 +23,7 @@ #include <VBox/vmm/cpum.h> #include <VBox/vmm/apic.h> #include <VBox/vmm/hm.h> +#include <VBox/vmm/hm_vmx.h> #include <VBox/vmm/tm.h> #include <VBox/vmm/gim.h> #include "CPUMInternal.h" @@ -1289,8 +1290,22 @@ static DECLCALLBACK(VBOXSTRICTRC) cpumMsrWr_Ia32DebugInterface(PVMCPU pVCpu, uin /** @callback_method_impl{FNCPUMRDMSR} */ static DECLCALLBACK(VBOXSTRICTRC) cpumMsrRd_Ia32VmxBasic(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); + if (pVCpu->CTX_SUFF(pVM)->cpum.s.GuestFeatures.fVmx) + { + uint64_t const fVmcsRevisionId = VMX_VMCS_REVISION_ID; + uint64_t const f32BitAddrLimit = 0; + uint64_t const fDualMonSmiSmm = 0; + uint64_t const fVmcsMemType = VMX_VMCS_MEM_TYPE_WB; + uint64_t const fVmcsInsOutsInfo = pVCpu->CTX_SUFF(pVM)->cpum.s.GuestFeatures.fVmxInsOutInfo; + *puValue = fVmcsRevisionId + | (f32BitAddrLimit << MSR_IA32_VMX_BASIC_VMCS_PHYS_WIDTH_SHIFT) + | (fDualMonSmiSmm << MSR_IA32_VMX_BASIC_DUAL_MON_SHIFT) + | (fVmcsMemType << MSR_IA32_VMX_BASIC_VMCS_MEM_TYPE_SHIFT) + | (fVmcsInsOutsInfo << MSR_IA32_VMX_BASIC_VMCS_INS_OUTS_SHIFT); + } + else + *puValue = 0; return VINF_SUCCESS; } |