VirtualBox

Changeset 19870 in vbox


Ignore:
Timestamp:
May 20, 2009 2:31:01 PM (15 years ago)
Author:
vboxsync
Message:

Save current EMT state to the saved state. Important for restoring VCPUs, that are in the wait for sipi state.

Location:
trunk/src/VBox/VMM
Files:
2 edited

Legend:

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

    r19828 r19870  
    519519        int rc = SSMR3PutBool(pSSM, pVCpu->em.s.fForceRAW);
    520520        AssertRCReturn(rc, rc);
     521
     522        Assert(pVCpu->em.s.enmState     == EMSTATE_SUSPENDED);
     523        Assert(pVCpu->em.s.enmPrevState != EMSTATE_SUSPENDED);
     524        rc = SSMR3PutU32(pSSM, pVCpu->em.s.enmPrevState);
     525        AssertRCReturn(rc, rc);
    521526    }
    522527    return VINF_SUCCESS;
     
    539544     * Validate version.
    540545     */
    541     if (u32Version != EM_SAVED_STATE_VERSION)
     546    if (    u32Version != EM_SAVED_STATE_VERSION
     547        &&  u32Version != EM_SAVED_STATE_VERSION_PRE_SMP)
    542548    {
    543549        AssertMsgFailed(("emR3Load: Invalid version u32Version=%d (current %d)!\n", u32Version, EM_SAVED_STATE_VERSION));
     
    556562            pVCpu->em.s.fForceRAW = false;
    557563
     564        if (u32Version > EM_SAVED_STATE_VERSION_PRE_SMP)
     565        {
     566            EMSTATE     enmState;
     567            uint32_t    u32;
     568            rc = SSMR3GetU32(pSSM, &u32);
     569            AssertRCReturn(rc, rc);
     570
     571            enmState = (EMSTATE)u32;
     572            Assert(enmState != EMSTATE_SUSPENDED);
     573            pVCpu->em.s.enmState     = enmState;
     574            pVCpu->em.s.enmPrevState = EMSTATE_NONE;
     575        }
    558576        Assert(!pVCpu->em.s.pCliStatTree);
    559577    }
     
    36573675        rc = VINF_SUCCESS;
    36583676
    3659         /** @todo doesn't work for the save/restore case */
    36603677        if (    pVCpu->em.s.enmState == EMSTATE_SUSPENDED
    36613678            &&  (   pVCpu->em.s.enmPrevState == EMSTATE_WAIT_SIPI
  • trunk/src/VBox/VMM/EMInternal.h

    r19440 r19870  
    4343
    4444/** The saved state version. */
    45 #define EM_SAVED_STATE_VERSION                      2
     45#define EM_SAVED_STATE_VERSION                          3
     46#define EM_SAVED_STATE_VERSION_PRE_SMP                  2
    4647
    4748/**
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