VirtualBox

Changeset 45384 in vbox


Ignore:
Timestamp:
Apr 5, 2013 4:21:15 PM (12 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
84809
Message:

VMM/VMMR0: HM bits.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/VMMR0/HMVMXR0.cpp

    r45380 r45384  
    36373637 *
    36383638 * @remarks No-long-jump zone!!!
    3639  * @remarks Requires RIP, RFLAGS (debug assert).
     3639 * @remarks Requires RIP, RFLAGS.
    36403640 */
    36413641DECLINLINE(int) hmR0VmxLoadGuestIntrState(PVM pVM, PVMCPU pVCpu, PCPUMCTX pCtx)
     
    36643664        else if (pCtx->eflags.u32 & X86_EFL_IF)
    36653665        {
     3666            /** @todo Pretty sure we don't need to check for Rflags.IF here.
     3667             *        Interrupt-shadow only matters when RIP changes. */
    36663668            /*
    36673669             * We don't have enough information to distinguish a block-by-STI vs. block-by-MOV SS. Intel seems to think there
     
    48504852    uint32_t uIntrState = 0;
    48514853    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
    48534857    {
    48544858        Assert(   uIntrState == VMX_VMCS_GUEST_INTERRUPTIBILITY_STATE_BLOCK_STI
    48554859               || 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(). */
    48574862        AssertRCReturn(rc, rc);
    48584863        EMSetInhibitInterruptsPC(pVCpu, pMixedCtx->rip);
    48594864        Assert(VMCPU_FF_IS_SET(pVCpu, VMCPU_FF_INHIBIT_INTERRUPTS));
    48604865    }
    4861     else
    4862         VMCPU_FF_CLEAR(pVCpu, VMCPU_FF_INHIBIT_INTERRUPTS);
    48634866
    48644867    pVCpu->hm.s.vmx.fUpdatedGuestState |= VMX_UPDATED_GUEST_INTR_STATE;
     
    63806383    /* Load the required guest state bits (for guest-state changes in the inner execution loop). */
    63816384    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);
    63876387    AssertRC(rc);
    63886388    AssertMsg(!pVCpu->hm.s.fContextUseFlags, ("fContextUseFlags =%#x\n", pVCpu->hm.s.fContextUseFlags));
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette