summaryrefslogtreecommitdiff
path: root/src/VBox/VMM/VMMAll/CPUMAllMsrs.cpp
diff options
context:
space:
mode:
authorvboxsync <vboxsync@cfe28804-0f27-0410-a406-dd0f0b0b656f>2018-07-20 15:40:10 +0000
committervboxsync <vboxsync@cfe28804-0f27-0410-a406-dd0f0b0b656f>2018-07-20 15:40:10 +0000
commita9683139f1d1e5a274ec30051c0f03d7d40097d5 (patch)
treee82bb533366d462d9f9385fa081fb42054217999 /src/VBox/VMM/VMMAll/CPUMAllMsrs.cpp
parent7acda010504379617bcfd6fbadbe0ac34a746e6c (diff)
downloadVirtualBox-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.cpp19
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;
}