Changeset 45384 in vbox
- Timestamp:
- Apr 5, 2013 4:21:15 PM (12 years ago)
- svn:sync-xref-src-repo-rev:
- 84809
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMR0/HMVMXR0.cpp
r45380 r45384 3637 3637 * 3638 3638 * @remarks No-long-jump zone!!! 3639 * @remarks Requires RIP, RFLAGS (debug assert).3639 * @remarks Requires RIP, RFLAGS. 3640 3640 */ 3641 3641 DECLINLINE(int) hmR0VmxLoadGuestIntrState(PVM pVM, PVMCPU pVCpu, PCPUMCTX pCtx) … … 3664 3664 else if (pCtx->eflags.u32 & X86_EFL_IF) 3665 3665 { 3666 /** @todo Pretty sure we don't need to check for Rflags.IF here. 3667 * Interrupt-shadow only matters when RIP changes. */ 3666 3668 /* 3667 3669 * We don't have enough information to distinguish a block-by-STI vs. block-by-MOV SS. Intel seems to think there … … 4850 4852 uint32_t uIntrState = 0; 4851 4853 int rc = VMXReadVmcs32(VMX_VMCS32_GUEST_INTERRUPTIBILITY_STATE, &uIntrState); 4852 if (uIntrState != 0) 4854 if (!uIntrState) 4855 VMCPU_FF_CLEAR(pVCpu, VMCPU_FF_INHIBIT_INTERRUPTS); 4856 else 4853 4857 { 4854 4858 Assert( uIntrState == VMX_VMCS_GUEST_INTERRUPTIBILITY_STATE_BLOCK_STI 4855 4859 || uIntrState == VMX_VMCS_GUEST_INTERRUPTIBILITY_STATE_BLOCK_MOVSS); 4856 rc = hmR0VmxSaveGuestRip(pVM, pVCpu, pMixedCtx); 4860 rc = hmR0VmxSaveGuestRip(pVM, pVCpu, pMixedCtx); 4861 rc |= hmR0VmxSaveGuestRflags(pVM, pVCpu, pMixedCtx); /* RFLAGS is needed in hmR0VmxLoadGuestIntrState(). */ 4857 4862 AssertRCReturn(rc, rc); 4858 4863 EMSetInhibitInterruptsPC(pVCpu, pMixedCtx->rip); 4859 4864 Assert(VMCPU_FF_IS_SET(pVCpu, VMCPU_FF_INHIBIT_INTERRUPTS)); 4860 4865 } 4861 else4862 VMCPU_FF_CLEAR(pVCpu, VMCPU_FF_INHIBIT_INTERRUPTS);4863 4866 4864 4867 pVCpu->hm.s.vmx.fUpdatedGuestState |= VMX_UPDATED_GUEST_INTR_STATE; … … 6380 6383 /* Load the required guest state bits (for guest-state changes in the inner execution loop). */ 6381 6384 Assert(!(pVCpu->hm.s.fContextUseFlags & HM_CHANGED_HOST_CONTEXT)); 6382 int rc; 6383 if (pVCpu->hm.s.fContextUseFlags == HM_CHANGED_GUEST_INTR_STATE) 6384 rc = hmR0VmxLoadGuestIntrState(pVM, pVCpu, pMixedCtx); 6385 else 6386 rc = VMXR0LoadGuestState(pVM, pVCpu, pMixedCtx); 6385 Log(("LoadFlags=%#RX32\n", pVCpu->hm.s.fContextUseFlags)); 6386 int rc = VMXR0LoadGuestState(pVM, pVCpu, pMixedCtx); 6387 6387 AssertRC(rc); 6388 6388 AssertMsg(!pVCpu->hm.s.fContextUseFlags, ("fContextUseFlags =%#x\n", pVCpu->hm.s.fContextUseFlags));
Note:
See TracChangeset
for help on using the changeset viewer.