VirtualBox

Changeset 18046 in vbox


Ignore:
Timestamp:
Mar 17, 2009 10:30:35 PM (16 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
44651
Message:

PGM,MM: saved state bugfixes for VBOX_WITH_NEW_PHYS_CODE.

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

Legend:

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

    r17547 r18046  
    605605    if (RT_FAILURE(rc))
    606606        return rc;
    607     if (cPages != pVM->mm.s.cBasePages)
    608     {
    609         LogRel(("mmR3Load: Memory configuration has changed. cPages=%#RX64 saved=%#RX64\n", pVM->mm.s.cBasePages, cPages));
    610         return VERR_SSM_LOAD_MEMORY_SIZE_MISMATCH;
    611     }
     607#ifdef VBOX_WITH_NEW_PHYS_CODE
     608    AssertLogRelMsgReturn(cPages <= pVM->mm.s.cBasePages, /* shadowed rom is counted twice, exact match here isn't really important. */
     609                          ("Memory configuration has changed. cPages=%#RX64 saved=%#RX64\n", pVM->mm.s.cBasePages, cPages),
     610                          VERR_SSM_LOAD_MEMORY_SIZE_MISMATCH);
     611#else
     612    AssertLogRelMsgReturn(cPages == pVM->mm.s.cBasePages,
     613                          ("Memory configuration has changed. cPages=%#RX64 saved=%#RX64\n", pVM->mm.s.cBasePages, cPages),
     614                          VERR_SSM_LOAD_MEMORY_SIZE_MISMATCH);
     615#endif
    612616
    613617    /* cbRamBase */
     
    622626    if (RT_FAILURE(rc))
    623627        return rc;
    624     if (cb != pVM->mm.s.cbRamBase)
    625     {
    626         LogRel(("mmR3Load: Memory configuration has changed. cbRamBase=%#RX64 save=%#RX64\n", pVM->mm.s.cbRamBase, cb));
    627         return VERR_SSM_LOAD_MEMORY_SIZE_MISMATCH;
    628     }
     628    AssertLogRelMsgReturn(cb == pVM->mm.s.cbRamBase,
     629                          ("Memory configuration has changed. cbRamBase=%#RX64 save=%#RX64\n", pVM->mm.s.cbRamBase, cb),
     630                          VERR_SSM_LOAD_MEMORY_SIZE_MISMATCH);
    629631
    630632    /* (PGM restores the physical memory.) */
  • trunk/src/VBox/VMM/PGM.cpp

    r17660 r18046  
    23382338            }
    23392339            else
     2340            {   
     2341                SSMR3PutU8(pSSM, uType);
    23402342                rc = pgmR3SavePage(pVM, pSSM, pPage, GCPhysPage, pRam);
     2343            }
    23412344            if (RT_FAILURE(rc))
    23422345                break;
     
    24472450     * Match up the type, dealing with MMIO2 aliases (dropped).
    24482451     */
    2449     if (    PGM_PAGE_GET_TYPE(pPage) != uType
    2450         &&  uType != PGMPAGETYPE_INVALID)
    2451     {
    2452         AssertLogRelMsgRCReturn(rc, ("pPage=%R[pgmpage] GCPhys=%#x %s\n", pPage, GCPhys, pRam->pszDesc), rc);
    2453         return VERR_SSM_UNEXPECTED_DATA;
    2454     }
     2452    AssertLogRelMsgReturn(   PGM_PAGE_GET_TYPE(pPage) == uType
     2453                          || uType == PGMPAGETYPE_INVALID,
     2454                          ("pPage=%R[pgmpage] GCPhys=%#x %s\n", pPage, GCPhys, pRam->pszDesc),
     2455                          VERR_SSM_UNEXPECTED_DATA);
    24552456
    24562457    /*
     
    24812482    uint8_t         uState;
    24822483    int rc = SSMR3GetU8(pSSM, &uState);
    2483     AssertLogRelMsgRCReturn(rc, ("pPage=%R[pgmpage] GCPhys=%#x %s\n", pPage, GCPhys, pRam->pszDesc), rc);
     2484    AssertLogRelMsgRCReturn(rc, ("pPage=%R[pgmpage] GCPhys=%#x %s rc=%Rrc\n", pPage, GCPhys, pRam->pszDesc, rc), rc);
    24842485    if (uState == 0 /* zero */)
    24852486        rc = pgmR3LoadPageZero(pVM, uType, pPage, GCPhys, pRam);
     
    24882489    else
    24892490        rc = VERR_INTERNAL_ERROR;
    2490     AssertLogRelMsgRCReturn(rc, ("pPage=%R[pgmpage] uState=%d uType=%d GCPhys=%#x %s\n",
     2491    AssertLogRelMsgRCReturn(rc, ("pPage=%R[pgmpage] uState=%d uType=%d GCPhys=%RGp %s rc=%Rrc\n",
    24912492                                 pPage, uState, uType, GCPhys, pRam->pszDesc),
    24922493                            rc);
     
    25792580        if (RT_FAILURE(rc))
    25802581            return rc;
    2581         if (cbRamSize != pPGM->cbRamSize)
    2582             return VERR_SSM_LOAD_MEMORY_SIZE_MISMATCH;
     2582        AssertLogRelMsgReturn(cbRamSize == pPGM->cbRamSize, ("%#x != %#x\n", cbRamSize, pPGM->cbRamSize),
     2583                              VERR_SSM_LOAD_MEMORY_SIZE_MISMATCH);
    25832584        SSMR3GetGCPhys(pSSM,    &pPGM->GCPhysA20Mask);
    25842585
     
    27202721            &&  (   u32Version != PGM_SAVED_STATE_VERSION_OLD_PHYS_CODE
    27212722                 || GCPhys     != UINT32_C(0xfff80000)
    2722                  || GCPhysLast != UINT32_C(0xfff80000)
     2723                 || GCPhysLast != UINT32_C(0xffffffff)
    27232724                 || pRam->GCPhysLast != GCPhysLast
    27242725                 || pRam->GCPhys     <  GCPhys
     
    27822783             * Old format.
    27832784             */
    2784             AssertLogRelReturn(pVM->pgm.s.fRamPreAlloc, VERR_NOT_SUPPORTED); /* can't be detected. */
     2785            AssertLogRelReturn(!pVM->pgm.s.fRamPreAlloc, VERR_NOT_SUPPORTED); /* can't be detected. */
    27852786
    27862787            /* Of the page flags, pick up MMIO2 and ROM/RESERVED for the !fHaveBits case.
     
    27962797
    27972798            /* Load the bits */
    2798             if (!fHaveBits)
     2799            if (    !fHaveBits
     2800                &&  GCPhysLast < UINT32_C(0xe0000000))
    27992801            {
    28002802                /*
    28012803                 * Dynamic chunks.
    28022804                 */
    2803                 const uint32_t cPagesInChunk = (1*1024*1024) >> PAGE_SHIFT;;
     2805                const uint32_t cPagesInChunk = (1*1024*1024) >> PAGE_SHIFT;
    28042806                AssertLogRelMsgReturn(cPages % cPagesInChunk == 0,
    28052807                                      ("cPages=%#x cPagesInChunk=%#x\n", cPages, cPagesInChunk, pRam->GCPhys, pRam->pszDesc),
     
    28112813                    rc = SSMR3GetU8(pSSM, &fPresent);
    28122814                    AssertLogRelMsgRCReturn(rc, ("rc=%Rrc iPage=%#x GCPhys=%#x %s\n", rc, iPage, pRam->GCPhys, pRam->pszDesc), rc);
    2813                     AssertLogRelMsgReturn(fPresent == true || fPresent == false,
     2815                    AssertLogRelMsgReturn(fPresent == (uint8_t)true || fPresent == (uint8_t)false,
    28142816                                          ("fPresent=%#x iPage=%#x GCPhys=%#x %s\n", fPresent, iPage, pRam->GCPhys, pRam->pszDesc),
    28152817                                          VERR_SSM_DATA_UNIT_FORMAT_CHANGED);
    28162818
    2817                     for (i = 0; i < cPagesInChunk; i++, iPage++)
     2819                    for (uint32_t iChunkPage = 0; iChunkPage < cPagesInChunk; iChunkPage++, iPage++)
    28182820                    {
    28192821                        RTGCPHYS const  GCPhysPage = ((RTGCPHYS)iPage << PAGE_SHIFT) + pRam->GCPhys;
    28202822                        PPGMPAGE        pPage      = &pRam->aPages[iPage];
    28212823                        if (fPresent)
    2822                             rc = pgmR3LoadPageBits(pVM, pSSM, PGMPAGETYPE_INVALID, pPage, GCPhysPage, pRam);
     2824                        {
     2825                            if (PGM_PAGE_GET_TYPE(pPage) == PGMPAGETYPE_MMIO)
     2826                                rc = pgmR3LoadPageToDevNull(pSSM);
     2827                            else
     2828                                rc = pgmR3LoadPageBits(pVM, pSSM, PGMPAGETYPE_INVALID, pPage, GCPhysPage, pRam);
     2829                        }
    28232830                        else
    28242831                            rc = pgmR3LoadPageZero(pVM, PGMPAGETYPE_INVALID, pPage, GCPhysPage, pRam);
     
    28322839                 * MMIO2.
    28332840                 */
    2834                 AssertLogRelMsgReturn((fFlags & 0x03) == RT_BIT(3) /*MM_RAM_FLAGS_MMIO2*/,
     2841                AssertLogRelMsgReturn((fFlags & 0x0f) == RT_BIT(3) /*MM_RAM_FLAGS_MMIO2*/,
    28352842                                      ("fFlags=%#x GCPhys=%#x %s\n", fFlags, pRam->GCPhys, pRam->pszDesc),
    28362843                                      VERR_SSM_DATA_UNIT_FORMAT_CHANGED);
     
    28412848                rc = SSMR3GetMem(pSSM, pRam->pvR3, pRam->cb);
    28422849                AssertLogRelMsgRCReturn(rc, ("GCPhys=%#x %s\n", pRam->GCPhys, pRam->pszDesc), rc);
     2850            }
     2851            else if (GCPhysLast < UINT32_C(0xfff80000))
     2852            {
     2853                /*
     2854                 * PCI MMIO, no pages saved.
     2855                 */
    28432856            }
    28442857            else
  • trunk/src/VBox/VMM/PGMInternal.h

    r17910 r18046  
    24862486    RTGCPHYS                        GCPhysA20Mask;
    24872487    /** A20 gate state - boolean! */
    2488     RTUINT                          fA20Enabled;
     2488    bool                            fA20Enabled;
    24892489
    24902490    /** What needs syncing (PGM_SYNC_*).
  • trunk/src/VBox/VMM/PGMPhys.cpp

    r17660 r18046  
    356356static void pgmR3PhysLinkRamRange(PVM pVM, PPGMRAMRANGE pNew, PPGMRAMRANGE pPrev)
    357357{
     358    AssertMsg(pNew->pszDesc, ("%RGp-%RGp\n", pNew->GCPhys, pNew->GCPhysLast));
     359
    358360    pgmLock(pVM);
    359361
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