VirtualBox

Changeset 78656 in vbox for trunk/src/VBox


Ignore:
Timestamp:
May 22, 2019 11:17:54 AM (6 years ago)
Author:
vboxsync
Message:

VMM/HMVMXR0: Nested VMX: bugref:9180 external interrupt, pause VM-exit handling.

File:
1 edited

Legend:

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

    r78650 r78656  
    1279412794        case VMX_EXIT_XCPT_OR_NMI:
    1279512795        case VMX_EXIT_MOV_CRX:
     12796
    1279612797        case VMX_EXIT_EXT_INT:
     12798        {
     12799            /* We shouldn't direct physical interrupts to the nested-guest. */
     12800            rcStrict = hmR0VmxExitExtInt(pVCpu, pVmxTransient);
     12801            break;
     12802        }
     12803
    1279712804        case VMX_EXIT_INT_WINDOW:
    1279812805        case VMX_EXIT_TPR_BELOW_THRESHOLD:
    1279912806        case VMX_EXIT_MWAIT:
    1280012807        case VMX_EXIT_MONITOR:
     12808
    1280112809        case VMX_EXIT_PAUSE:
     12810        {
     12811            /* The CPU would have already performed the necessary CPL checks for PAUSE-loop exiting. */
     12812            /** @todo NSTVMX: Think about this more. Does the outer guest need to intercept
     12813             *        PAUSE when executing a nested-guest? If it does not, we would not need
     12814             *        to check for the intercepts here. Just call VM-exit... */
     12815            if (   CPUMIsGuestVmxProcCtlsSet(pVCpu, &pVCpu->cpum.GstCtx, VMX_PROC_CTLS_PAUSE_EXIT)
     12816                || CPUMIsGuestVmxProcCtls2Set(pVCpu, &pVCpu->cpum.GstCtx, VMX_PROC_CTLS2_PAUSE_LOOP_EXIT))
     12817            {
     12818                int rc = hmR0VmxReadExitInstrLenVmcs(pVmxTransient);
     12819                AssertRCReturn(rc, rc);
     12820
     12821                VMXVEXITINFO ExitInfo;
     12822                RT_ZERO(ExitInfo);
     12823                ExitInfo.uReason = uExitReason;
     12824                ExitInfo.cbInstr = pVmxTransient->cbInstr;
     12825                rcStrict = IEMExecVmxVmexitInstr(pVCpu, uExitReason, pVmxTransient->cbInstr);
     12826            }
     12827            else
     12828                rcStrict = hmR0VmxExitPause(pVCpu, pVmxTransient);
     12829            break;
     12830        }
     12831
    1280212832        case VMX_EXIT_PREEMPT_TIMER:
    1280312833        case VMX_EXIT_MOV_DRX:
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