VirtualBox

Changeset 72085 in vbox for trunk/src/VBox


Ignore:
Timestamp:
May 3, 2018 7:31:33 AM (7 years ago)
Author:
vboxsync
Message:

VMM/HMSVMR0: Nested hw.virt: VM-Exit transitions can happen with VINF_PGM_CHANGE_MODE as well as VINF_SVM_VMEXIT when done from ring-0.

File:
1 edited

Legend:

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

    r72080 r72085  
    41184118{
    41194119    HMSVM_ASSERT_PREEMPT_SAFE();
    4120 
    4121     if (CPUMIsGuestInSvmNestedHwVirtMode(pCtx))
    4122     {
     4120    HMSVM_ASSERT_IN_NESTED_GUEST(pCtx);
     4121
    41234122#ifdef VBOX_WITH_NESTED_HWVIRT_ONLY_IN_IEM
    4124         Log2(("hmR0SvmPreRunGuest: Rescheduling to IEM due to nested-hwvirt or forced IEM exec -> VINF_EM_RESCHEDULE_REM\n"));
    4125         return VINF_EM_RESCHEDULE_REM;
     4123    Log2(("hmR0SvmPreRunGuest: Rescheduling to IEM due to nested-hwvirt or forced IEM exec -> VINF_EM_RESCHEDULE_REM\n"));
     4124    return VINF_EM_RESCHEDULE_REM;
    41264125#endif
    4127     }
    4128     else
    4129     {
    4130         /** @todo Remove this assertion after its sufficiently established that this
    4131          *        never happens. */
    4132         AssertFailedReturn(VERR_INVALID_STATE);
    4133     }
    41344126
    41354127    /* Check force flag actions that might require us to go back to ring-3. */
     
    41434135    {
    41444136        VBOXSTRICTRC rcStrict = hmR0SvmEvaluatePendingEventNested(pVCpu, pCtx);
    4145         if (rcStrict != VINF_SUCCESS)
     4137        if (    rcStrict != VINF_SUCCESS
     4138            || !CPUMIsGuestInSvmNestedHwVirtMode(pCtx))
    41464139            return VBOXSTRICTRC_VAL(rcStrict);
    4147         if (!CPUMIsGuestInSvmNestedHwVirtMode(pCtx))
    4148             return VINF_SVM_VMEXIT;
    4149     }
     4140    }
     4141
     4142    HMSVM_ASSERT_IN_NESTED_GUEST(pCtx);
    41504143
    41514144    /*
     
    48314824        STAM_PROFILE_ADV_START(&pVCpu->hm.s.StatEntry, x);
    48324825        rc = hmR0SvmPreRunGuestNested(pVM, pVCpu, pCtx, &SvmTransient);
    4833         if (   rc != VINF_SUCCESS
     4826        if (    rc != VINF_SUCCESS
    48344827            || !CPUMIsGuestInSvmNestedHwVirtMode(pCtx))
    48354828        {
     
    48714864        rc = hmR0SvmHandleExitNested(pVCpu, pCtx, &SvmTransient);
    48724865        STAM_PROFILE_ADV_STOP(&pVCpu->hm.s.StatExit2, x);
    4873         if (rc != VINF_SUCCESS)
     4866        if (    rc != VINF_SUCCESS
     4867            || !CPUMIsGuestInSvmNestedHwVirtMode(pCtx))
    48744868            break;
    48754869        if (++(*pcLoops) >= pVM->hm.s.cMaxResumeLoops)
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