Changeset 81790 in vbox for trunk/src/VBox/VMM/VMMR0
- Timestamp:
- Nov 12, 2019 5:36:24 AM (5 years ago)
- svn:sync-xref-src-repo-rev:
- 134581
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMR0/HMVMXR0.cpp
r81786 r81790 2551 2551 * @param fIsNstGstVmcs Whether this is a nested-guest VMCS. 2552 2552 */ 2553 static int hmR0VmxCheck VmcsCtls(PVMCPUCC pVCpu, PCVMXVMCSINFO pVmcsInfo, bool fIsNstGstVmcs)2553 static int hmR0VmxCheckCachedVmcsCtls(PVMCPUCC pVCpu, PCVMXVMCSINFO pVmcsInfo, bool fIsNstGstVmcs) 2554 2554 { 2555 2555 const char * const pcszVmcs = fIsNstGstVmcs ? "Nested-guest VMCS" : "VMCS"; … … 9229 9229 } while (0) 9230 9230 9231 int rc; 9232 PVMCC pVM = pVCpu->CTX_SUFF(pVM); 9231 PVMCC pVM = pVCpu->CTX_SUFF(pVM); 9233 9232 PCPUMCTX pCtx = &pVCpu->cpum.GstCtx; 9234 9233 uint32_t uError = VMX_IGS_ERROR; 9235 uint32_t u32 Val;9234 uint32_t u32IntrState = 0; 9236 9235 bool const fUnrestrictedGuest = pVM->hm.s.vmx.fUnrestrictedGuest; 9237 9238 9236 do 9239 9237 { 9238 int rc; 9239 9240 /* 9241 * Guest-interruptibility state. 9242 * Read this first so as to record its value for ring-3 propagation. 9243 */ 9244 rc = VMXReadVmcs32(VMX_VMCS32_GUEST_INT_STATE, &u32IntrState); 9245 AssertRC(rc); 9246 9247 uint32_t u32Val; 9248 uint64_t u64Val; 9249 9240 9250 /* 9241 9251 * CR0. … … 9275 9285 * IA32_DEBUGCTL MSR. 9276 9286 */ 9277 uint64_t u64Val;9278 9287 rc = VMXReadVmcs64(VMX_VMCS64_GUEST_DEBUGCTL_FULL, &u64Val); 9279 9288 AssertRC(rc); … … 9642 9651 HMVMX_CHECK_BREAK( !(pCtx->ss.Attr.n.u2Dpl) 9643 9652 || u32ActivityState != VMX_VMCS_GUEST_ACTIVITY_HLT, VMX_IGS_ACTIVITY_STATE_HLT_INVALID); 9644 uint32_t u32IntrState; 9645 rc = VMXReadVmcs32(VMX_VMCS32_GUEST_INT_STATE, &u32IntrState); 9646 AssertRC(rc); 9653 9647 9654 if ( u32IntrState == VMX_VMCS_GUEST_INT_STATE_BLOCK_MOVSS 9648 9655 || u32IntrState == VMX_VMCS_GUEST_INT_STATE_BLOCK_STI) … … 9758 9765 9759 9766 pVCpu->hm.s.u32HMError = uError; 9767 pVCpu->hm.s.vmx.LastError.u32GuestIntrState = u32IntrState; 9760 9768 return uError; 9761 9769 … … 10634 10642 hmR0VmxCheckAutoLoadStoreMsrs(pVCpu, pVmcsInfo, pVmxTransient->fIsNestedGuest); 10635 10643 hmR0VmxCheckHostEferMsr(pVCpu, pVmcsInfo); 10636 AssertRC(hmR0VmxCheck VmcsCtls(pVCpu, pVmcsInfo, pVmxTransient->fIsNestedGuest));10644 AssertRC(hmR0VmxCheckCachedVmcsCtls(pVCpu, pVmcsInfo, pVmxTransient->fIsNestedGuest)); 10637 10645 #endif 10638 10646 … … 14624 14632 AssertRCReturn(rc, rc); 14625 14633 14626 rc = hmR0VmxCheck VmcsCtls(pVCpu, pVmcsInfo, pVmxTransient->fIsNestedGuest);14634 rc = hmR0VmxCheckCachedVmcsCtls(pVCpu, pVmcsInfo, pVmxTransient->fIsNestedGuest); 14627 14635 if (RT_FAILURE(rc)) 14628 14636 return rc;
Note:
See TracChangeset
for help on using the changeset viewer.