VirtualBox

Changeset 41326 in vbox for trunk/src/VBox/VMM/VMMR3


Ignore:
Timestamp:
May 16, 2012 8:51:28 AM (13 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
77996
Message:

EM: don't miss the wakeup after an interrupt was injected in certain cases, in particular when suspending

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/VMMR3/EM.cpp

    r41248 r41326  
    16481648         * Interrupts.
    16491649         */
     1650        bool fWakeupPending = false;
    16501651        if (    !VM_FF_ISPENDING(pVM, VM_FF_PGM_NO_MEMORY)
    16511652            &&  !VMCPU_FF_ISPENDING(pVCpu, VMCPU_FF_INHIBIT_INTERRUPTS)
     
    16651666#endif
    16661667                UPDATE_RC();
     1668                /* Reschedule required: We must not miss the wakeup below! */
     1669                fWakeupPending = true;
    16671670            }
    16681671#ifdef VBOX_WITH_REM
     
    16971700         * EMT Rendezvous (must be serviced before termination).
    16981701         */
    1699         if (VM_FF_ISPENDING(pVM, VM_FF_EMT_RENDEZVOUS))
     1702        if (   !fWakeupPending /* don't miss the wakeup from EMSTATE_HALTED! */
     1703            && VM_FF_ISPENDING(pVM, VM_FF_EMT_RENDEZVOUS))
    17001704        {
    17011705            rc2 = VMMR3EmtRendezvousFF(pVM, pVCpu);
     
    17161720         * State change request (cleared by vmR3SetStateLocked).
    17171721         */
    1718         if (VM_FF_ISPENDING(pVM, VM_FF_CHECK_VM_STATE))
     1722        if (   !fWakeupPending /* don't miss the wakeup from EMSTATE_HALTED! */
     1723            && VM_FF_ISPENDING(pVM, VM_FF_CHECK_VM_STATE))
    17191724        {
    17201725            VMSTATE enmState = VMR3GetState(pVM);
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