VirtualBox

Changeset 36042 in vbox for trunk/src/VBox


Ignore:
Timestamp:
Feb 21, 2011 4:51:08 PM (14 years ago)
Author:
vboxsync
Message:

PGMSavedState.cpp: Must change ballooned pages to zero pages when processing PGM_STATE_REC_RAM_ZERO.

File:
1 edited

Legend:

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

    r36013 r36042  
    8585/** ROM protection (8-bit). */
    8686#define PGM_STATE_REC_ROM_PROT          UINT8_C(0x07)
    87 /** Ballooned page. */
     87/** Ballooned page. No data. */
    8888#define PGM_STATE_REC_RAM_BALLOONED     UINT8_C(0x08)
    8989/** The last record type. */
     
    514514                    RTGCPHYS    GCPhys  = pRom->GCPhys + ((RTGCPHYS)iPage << PAGE_SHIFT);
    515515                    PPGMPAGE    pPage   = PGMROMPROT_IS_ROM(enmProt) ? &pRomPage->Shadow : pgmPhysGetPage(&pVM->pgm.s, GCPhys);
    516                     bool        fZero   = PGM_PAGE_IS_ZERO(pPage) || PGM_PAGE_IS_BALLOONED(pPage);  /* Do we ever balloon shadow ROM pages!? */
     516                    bool        fZero   = PGM_PAGE_IS_ZERO(pPage) || PGM_PAGE_IS_BALLOONED(pPage); Assert(!PGM_PAGE_IS_BALLOONED(pPage)); /* Shouldn't be ballooned. */
    517517                    int         rc      = VINF_SUCCESS;
    518518                    if (!fZero)
     
    13641364                                }
    13651365
    1366                                 pgmPhysPageWriteMonitor(pVM, &pCur->aPages[iPage], 
     1366                                pgmPhysPageWriteMonitor(pVM, &pCur->aPages[iPage],
    13671367                                                        pCur->GCPhys + ((RTGCPHYS)iPage << PAGE_SHIFT));
    13681368                                paLSPages[iPage].fWriteMonitored        = 1;
     
    16721672                    {
    16731673                        /*
    1674                          * Dirty zero page.
     1674                         * Dirty zero or ballooned page.
    16751675                         */
    16761676#ifdef PGMLIVESAVERAMPAGE_WITH_CRC32
     
    25662566 * @param   pVM                 The VM handle.
    25672567 * @param   pSSM                The SSM handle.
     2568 * @param   uVersion            The PGM saved state unit version.
    25682569 * @param   uPass               The pass number.
    25692570 *
     
    25712572 *          added...
    25722573 */
    2573 static int pgmR3LoadMemory(PVM pVM, PSSMHANDLE pSSM, uint32_t uPass)
     2574static int pgmR3LoadMemory(PVM pVM, PSSMHANDLE pSSM, uint32_t uVersion, uint32_t uPass)
    25742575{
    25752576    /*
     
    26502651                    case PGM_STATE_REC_RAM_ZERO:
    26512652                    {
    2652                         if (    PGM_PAGE_IS_ZERO(pPage)
    2653                             ||  PGM_PAGE_IS_BALLOONED(pPage))
     2653                        if (PGM_PAGE_IS_ZERO(pPage))
    26542654                            break;
     2655
     2656                        /* Ballooned pages must be unmarked (live snapshot and
     2657                           teleportation scenarios). */
     2658                        if (PGM_PAGE_IS_BALLOONED(pPage))
     2659                        {
     2660                            Assert(PGM_PAGE_GET_TYPE(pPage) == PGMPAGETYPE_RAM);
     2661                            if (uVersion == PGM_SAVED_STATE_VERSION_BALLOON_BROKEN)
     2662                                break;
     2663                            PGM_PAGE_SET_STATE(pPage, PGM_PAGE_STATE_ZERO);
     2664                            break;
     2665                        }
     2666
    26552667                        AssertLogRelMsgReturn(PGM_PAGE_GET_STATE(pPage) == PGM_PAGE_STATE_ALLOCATED, ("GCPhys=%RGp %R[pgmpage]\n", GCPhys, pPage), VERR_INTERNAL_ERROR_5);
    26562668
     
    26792691                    case PGM_STATE_REC_RAM_BALLOONED:
    26802692                    {
     2693                        Assert(PGM_PAGE_GET_TYPE(pPage) == PGMPAGETYPE_RAM);
    26812694                        if (PGM_PAGE_IS_BALLOONED(pPage))
    26822695                            break;
    26832696
    2684                         /*
    2685                          * We don't map ballooned pages in our shadow page tables, let's just free it if allocated and mark as ballooned.
    2686                          * See #5515.
    2687                          */
     2697                        /* We don't map ballooned pages in our shadow page tables, let's
     2698                           just free it if allocated and mark as ballooned.  See #5515. */
    26882699                        if (PGM_PAGE_IS_ALLOCATED(pPage))
    26892700                        {
     
    30303041        }
    30313042
    3032         rc = pgmR3LoadMemory(pVM, pSSM, SSM_PASS_FINAL);
     3043        rc = pgmR3LoadMemory(pVM, pSSM, uVersion, SSM_PASS_FINAL);
    30333044    }
    30343045    else
     
    30903101        pgmLock(pVM);
    30913102        if (uPass != 0)
    3092             rc = pgmR3LoadMemory(pVM, pSSM, uPass);
     3103            rc = pgmR3LoadMemory(pVM, pSSM, uVersion, uPass);
    30933104        else
    30943105        {
     
    31033114                rc = pgmR3LoadMmio2Ranges(pVM, pSSM);
    31043115            if (RT_SUCCESS(rc))
    3105                 rc = pgmR3LoadMemory(pVM, pSSM, uPass);
     3116                rc = pgmR3LoadMemory(pVM, pSSM, uVersion, uPass);
    31063117        }
    31073118        pgmUnlock(pVM);
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