Changeset 30948 in vbox
- Timestamp:
- Jul 21, 2010 11:27:40 AM (15 years ago)
- svn:sync-xref-src-repo-rev:
- 63836
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/PGMSavedState.cpp
r30744 r30948 1596 1596 if (RT_SUCCESS(rc)) 1597 1597 { 1598 /* Skip allocated pages that are zero. */1599 if ( !fLiveSave1600 && ASMMemIsZeroPage(pvPage))1601 {1602 fZero = true;1603 goto save_zero_page;1604 }1605 1606 1598 memcpy(abPage, pvPage, PAGE_SIZE); 1607 1599 #ifdef PGMLIVESAVERAMPAGE_WITH_CRC32 … … 1613 1605 AssertLogRelMsgRCReturn(rc, ("rc=%Rrc GCPhys=%RGp\n", rc, GCPhys), rc); 1614 1606 1615 if (GCPhys == GCPhysLast + PAGE_SIZE) 1616 SSMR3PutU8(pSSM, PGM_STATE_REC_RAM_RAW); 1607 /* Try save some memory when restoring. */ 1608 if (!ASMMemIsZeroPage(pvPage)) 1609 { 1610 if (GCPhys == GCPhysLast + PAGE_SIZE) 1611 SSMR3PutU8(pSSM, PGM_STATE_REC_RAM_RAW); 1612 else 1613 { 1614 SSMR3PutU8(pSSM, PGM_STATE_REC_RAM_RAW | PGM_STATE_REC_FLAG_ADDR); 1615 SSMR3PutGCPhys(pSSM, GCPhys); 1616 } 1617 rc = SSMR3PutMem(pSSM, abPage, PAGE_SIZE); 1618 } 1617 1619 else 1618 1620 { 1619 SSMR3PutU8(pSSM, PGM_STATE_REC_RAM_RAW | PGM_STATE_REC_FLAG_ADDR); 1620 SSMR3PutGCPhys(pSSM, GCPhys); 1621 if (GCPhys == GCPhysLast + PAGE_SIZE) 1622 rc = SSMR3PutU8(pSSM, PGM_STATE_REC_RAM_ZERO); 1623 else 1624 { 1625 SSMR3PutU8(pSSM, PGM_STATE_REC_RAM_ZERO | PGM_STATE_REC_FLAG_ADDR); 1626 rc = SSMR3PutGCPhys(pSSM, GCPhys); 1627 } 1621 1628 } 1622 rc = SSMR3PutMem(pSSM, abPage, PAGE_SIZE);1623 1629 } 1624 1630 else 1625 1631 { 1626 save_zero_page:1627 1632 /* 1628 1633 * Dirty zero page. … … 2601 2606 || PGM_PAGE_IS_BALLOONED(pPage)) 2602 2607 break; 2603 AssertLogRelMsgReturn(PGM_PAGE_GET_STATE(pPage) == PGM_PAGE_STATE_ALLOCATED, ("GCPhys=%RGp %R[pgmpage]\n", GCPhys, pPage), VERR_INTERNAL_ERROR_5); 2608 AssertLogRelMsgReturn(PGM_PAGE_GET_STATE(pPage) == PGM_PAGE_STATE_ALLOCATED, ("GCPhys=%RGp %R[pgmpage]\n", GCPhys, pPage), VERR_INTERNAL_ERROR_5); 2604 2609 /* Allocated before (prealloc), so free it now. */ 2605 2610 rc = pgmPhysFreePage(pVM, pReq, &cPendingPages, pPage, GCPhys);
Note:
See TracChangeset
for help on using the changeset viewer.