VirtualBox

Changeset 19436 in vbox for trunk/src/VBox


Ignore:
Timestamp:
May 6, 2009 2:33:49 PM (16 years ago)
Author:
vboxsync
Message:

VMM.cpp: Not necessary to save the new stacks (see comment in vmmR3Load). Save and restore the essence of VMCPU::enmState.

File:
1 edited

Legend:

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

    r19434 r19436  
    219219    int rc = VINF_SUCCESS;
    220220
    221     for (unsigned idCpu = 0; idCpu < pVM->cCPUs; idCpu++)
     221    for (VMCPUID idCpu = 0; idCpu < pVM->cCPUs; idCpu++)
    222222    {
    223223        PVMCPU pVCpu = &pVM->aCpus[idCpu];
     
    392392    int rc = VINF_SUCCESS;
    393393
    394     for (unsigned idCpu = 0; idCpu < pVM->cCPUs; idCpu++)
     394    for (VMCPUID idCpu = 0; idCpu < pVM->cCPUs; idCpu++)
    395395    {
    396396        PVMCPU pVCpu = &pVM->aCpus[idCpu];
     
    660660     * The stack.
    661661     */
    662     for (unsigned i=0;i<pVM->cCPUs;i++)
     662    for (VMCPUID i = 0; i < pVM->cCPUs; i++)
    663663    {
    664664        PVMCPU pVCpu = &pVM->aCpus[i];
     
    669669        pVCpu->vmm.s.pbEMTStackBottomRC = pVCpu->vmm.s.pbEMTStackRC + VMM_STACK_SIZE;
    670670    }
    671 
    672671
    673672    /*
     
    826825    LogFlow(("vmmR3Save:\n"));
    827826
    828     for (unsigned i=0;i<pVM->cCPUs;i++)
    829     {
    830         PVMCPU pVCpu = &pVM->aCpus[i];
    831 
    832         /*
    833          * The hypervisor stack.
    834          * Note! See not in vmmR3Load.
    835          */
    836         SSMR3PutRCPtr(pSSM, pVCpu->vmm.s.pbEMTStackBottomRC);
    837 
    838         RTRCPTR RCPtrESP = CPUMGetHyperESP(pVCpu);
    839         AssertMsg(pVCpu->vmm.s.pbEMTStackBottomRC - RCPtrESP <= VMM_STACK_SIZE, ("Bottom %RRv ESP=%RRv\n", pVCpu->vmm.s.pbEMTStackBottomRC, RCPtrESP));
    840         SSMR3PutRCPtr(pSSM, RCPtrESP);
    841 
    842         SSMR3PutMem(pSSM, pVCpu->vmm.s.pbEMTStackR3, VMM_STACK_SIZE);
    843     }
     827    /*
     828     * The hypervisor stack.
     829     * Note! See note in vmmR3Load (remove this on version change).
     830     */
     831    PVMCPU pVCpu0 = &pVM->aCpus[0];
     832    SSMR3PutRCPtr(pSSM, pVCpu0->vmm.s.pbEMTStackBottomRC);
     833    RTRCPTR RCPtrESP = CPUMGetHyperESP(pVCpu0);
     834    AssertMsg(pVCpu0->vmm.s.pbEMTStackBottomRC - RCPtrESP <= VMM_STACK_SIZE, ("Bottom %RRv ESP=%RRv\n", pVCpu0->vmm.s.pbEMTStackBottomRC, RCPtrESP));
     835    SSMR3PutRCPtr(pSSM, RCPtrESP);
     836    SSMR3PutMem(pSSM, pVCpu0->vmm.s.pbEMTStackR3, VMM_STACK_SIZE);
     837
     838    /*
     839     * Save the started/stopped state of all CPUs except 0 as it will always
     840     * be running. This avoids breaking the saved state version. :-)
     841     */
     842    for (VMCPUID i = 1; i < pVM->cCPUs; i++)
     843        SSMR3PutBool(pSSM, VMCPUSTATE_IS_STARTED(VMCPU_GET_STATE(&pVM->aCpus[i])));
     844
    844845    return SSMR3PutU32(pSSM, ~0); /* terminator */
    845846}
     
    880881    if (RT_FAILURE(rc))
    881882        return rc;
    882 
    883     /* restore the stack.  */
    884     for (unsigned i=0;i<pVM->cCPUs;i++)
    885     {
    886         PVMCPU pVCpu = &pVM->aCpus[i];
    887 
    888         SSMR3GetMem(pSSM, pVCpu->vmm.s.pbEMTStackR3, VMM_STACK_SIZE);
     883    SSMR3GetMem(pSSM, pVM->aCpus[0].vmm.s.pbEMTStackR3, VMM_STACK_SIZE);
     884
     885    /* Restore the VMCPU states. VCPU 0 is always started. */
     886    VMCPU_SET_STATE(&pVM->aCpus[0], VMCPUSTATE_STARTED);
     887    for (VMCPUID i = 1; i < pVM->cCPUs; i++)
     888    {
     889        bool fStarted;
     890        rc = SSMR3GetBool(pSSM, &fStarted);
     891        if (RT_FAILURE(rc))
     892            return rc;
     893        VMCPU_SET_STATE(&pVM->aCpus[i], fStarted ? VMCPUSTATE_STARTED : VMCPUSTATE_STOPPED);
    889894    }
    890895
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