VirtualBox

Ignore:
Timestamp:
Mar 6, 2019 10:02:07 AM (6 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
129194
Message:

VMM/HMVMXR0: Nested VMX: bugref:9180 Fleshing out nested-guest run loop, skeleton.

File:
1 edited

Legend:

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

    r77577 r77578  
    90149014}
    90159015
     9016#ifdef VBOX_WITH_NESTED_HWVIRT_VMX
     9017/**
     9018 * Runs the nested-guest code using VT-x the normal way.
     9019 *
     9020 * @returns VBox status code.
     9021 * @param   pVCpu       The cross context virtual CPU structure.
     9022 * @sa      hmR0VmxRunGuestCodeNormal.
     9023 */
     9024static VBOXSTRICTRC hmR0VmxRunGuestCodeNested(PVMCPU pVCpu)
     9025{
     9026    RT_NOREF(pVCpu);
     9027    return VERR_NOT_IMPLEMENTED;
     9028}
     9029#endif /* VBOX_WITH_NESTED_HWVIRT_VMX */
    90169030
    90179031
     
    1034410358
    1034510359    VBOXSTRICTRC rcStrict;
    10346     if (   !pVCpu->hm.s.fUseDebugLoop
    10347         && (!VBOXVMM_ANY_PROBES_ENABLED() || !hmR0VmxAnyExpensiveProbesEnabled())
    10348         && !DBGFIsStepping(pVCpu)
    10349         && !pVCpu->CTX_SUFF(pVM)->dbgf.ro.cEnabledInt3Breakpoints)
    10350         rcStrict = hmR0VmxRunGuestCodeNormal(pVCpu);
     10360#ifdef VBOX_WITH_NESTED_HWVIRT_VMX
     10361    bool const fInNestedGuestMode = CPUMIsGuestInVmxNonRootMode(pCtx);
     10362#else
     10363    bool const fInNestedGuestMode = false;
     10364#endif
     10365    if (!fInNestedGuestMode)
     10366    {
     10367        if (   !pVCpu->hm.s.fUseDebugLoop
     10368            && (!VBOXVMM_ANY_PROBES_ENABLED() || !hmR0VmxAnyExpensiveProbesEnabled())
     10369            && !DBGFIsStepping(pVCpu)
     10370            && !pVCpu->CTX_SUFF(pVM)->dbgf.ro.cEnabledInt3Breakpoints)
     10371            rcStrict = hmR0VmxRunGuestCodeNormal(pVCpu);
     10372        else
     10373            rcStrict = hmR0VmxRunGuestCodeDebug(pVCpu);
     10374    }
     10375#ifdef VBOX_WITH_NESTED_HWVIRT_VMX
    1035110376    else
    10352         rcStrict = hmR0VmxRunGuestCodeDebug(pVCpu);
     10377        rcStrict = VINF_VMX_VMLAUNCH_VMRESUME;
     10378
     10379    if (rcStrict == VINF_VMX_VMLAUNCH_VMRESUME)
     10380        rcStrict = hmR0VmxRunGuestCodeNested(pVCpu);
     10381#endif
    1035310382
    1035410383    if (rcStrict == VERR_EM_INTERPRETER)
     
    1353613565    VBOXSTRICTRC rcStrict = IEMExecDecodedVmlaunchVmresume(pVCpu, pVmxTransient->cbInstr, VMXINSTRID_VMLAUNCH);
    1353713566    if (RT_LIKELY(rcStrict == VINF_SUCCESS))
     13567    {
     13568        rcStrict = VINF_VMX_VMLAUNCH_VMRESUME;
    1353813569        ASMAtomicUoOrU64(&pVCpu->hm.s.fCtxChanged, HM_CHANGED_ALL_GUEST);
     13570    }
    1353913571    Assert(rcStrict != VINF_IEM_RAISED_XCPT);
    1354013572    return rcStrict;
     
    1366613698    VBOXSTRICTRC rcStrict = IEMExecDecodedVmlaunchVmresume(pVCpu, pVmxTransient->cbInstr, VMXINSTRID_VMRESUME);
    1366713699    if (RT_LIKELY(rcStrict == VINF_SUCCESS))
     13700    {
     13701        rcStrict = VINF_VMX_VMLAUNCH_VMRESUME;
    1366813702        ASMAtomicUoOrU64(&pVCpu->hm.s.fCtxChanged, HM_CHANGED_ALL_GUEST);
     13703    }
    1366913704    Assert(rcStrict != VINF_IEM_RAISED_XCPT);
    1367013705    return rcStrict;
Note: See TracChangeset for help on using the changeset viewer.

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