VirtualBox

Changeset 86118 in vbox


Ignore:
Timestamp:
Sep 14, 2020 9:09:05 AM (5 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
140352
Message:

VMM: Fix debug assertion for VMs with VMSVGA and 3D enabled and using NEM/Hyper-V where VMR3WaitHalted() might be called when the vmsvga sync register is accessed in R3 in the NEM execution loop

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/include/VBox/vmm/vm.h

    r86098 r86118  
    344344                  enmState, enmExpectedState, (pVCpu)->idCpu)); \
    345345    } while (0)
     346
     347# define VMCPU_ASSERT_STATE_2(pVCpu, enmExpectedState, a_enmExpectedState2) \
     348    do { \
     349        VMCPUSTATE enmState = VMCPU_GET_STATE(pVCpu); \
     350        AssertMsg(   enmState == (enmExpectedState) \
     351                  || enmState == (a_enmExpectedState2), \
     352                  ("enmState=%d  enmExpectedState=%d enmExpectedState2=%d idCpu=%u\n", \
     353                  enmState, enmExpectedState, a_enmExpectedState2, (pVCpu)->idCpu)); \
     354    } while (0)
    346355#else
    347356# define VMCPU_ASSERT_STATE(pVCpu, enmExpectedState) do { } while (0)
     357# define VMCPU_ASSERT_STATE_2(pVCpu, enmExpectedState, a_enmExpectedState2) do { } while (0)
    348358#endif
    349359/** Tests if the state means that the CPU is started. */
  • trunk/src/VBox/VMM/VMMR3/VMEmt.cpp

    r82968 r86118  
    11521152     * Do the halt.
    11531153     */
    1154     VMCPU_ASSERT_STATE(pVCpu, VMCPUSTATE_STARTED);
     1154    VMCPU_ASSERT_STATE_2(pVCpu, VMCPUSTATE_STARTED, VMCPUSTATE_STARTED_EXEC_NEM);
     1155    VMCPUSTATE enmStateOld = VMCPU_GET_STATE(pVCpu);
    11551156    VMCPU_SET_STATE(pVCpu, VMCPUSTATE_STARTED_HALTED);
    11561157    PUVM pUVM = pUVCpu->pUVM;
    11571158    int rc = g_aHaltMethods[pUVM->vm.s.iHaltMethod].pfnHalt(pUVCpu, fMask, u64Now);
    1158     VMCPU_SET_STATE(pVCpu, VMCPUSTATE_STARTED);
     1159    VMCPU_SET_STATE(pVCpu, enmStateOld);
    11591160
    11601161    /*
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