Changeset 27543 in vbox
- Timestamp:
- Mar 19, 2010 3:47:14 PM (15 years ago)
- svn:sync-xref-src-repo-rev:
- 59056
- Location:
- trunk/src/VBox/VMM
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/PGM.cpp
r27282 r27543 4268 4268 while (GCPhys < pRam->GCPhysLast && RT_SUCCESS(rc)) 4269 4269 { 4270 if (PGM_PAGE_IS_ZERO(pPage)) 4270 if ( PGM_PAGE_IS_ZERO(pPage) 4271 || PGM_PAGE_IS_BALLOONED(pPage)) 4271 4272 { 4272 4273 if (fIncZeroPgs) -
trunk/src/VBox/VMM/PGMDbg.cpp
r26150 r27543 607 607 if ( ( !PGM_PAGE_IS_ZERO(pPage) 608 608 || fAllZero) 609 && !PGM_PAGE_IS_BALLOONED(pPage) 609 610 && !PGM_PAGE_IS_MMIO(pPage)) 610 611 { … … 747 748 && ( !PGM_PAGE_IS_ZERO(pPage) 748 749 || fAllZero) 750 && !PGM_PAGE_IS_BALLOONED(pPage) 749 751 && !PGM_PAGE_IS_MMIO(pPage)) 750 752 { -
trunk/src/VBox/VMM/PGMInternal.h
r27488 r27543 826 826 * @param pPage Pointer to the physical guest page tracking structure. 827 827 */ 828 #define PGM_PAGE_IS_BALLOONED(pPage) 828 #define PGM_PAGE_IS_BALLOONED(pPage) ( (pPage)->uStateY == PGM_PAGE_STATE_BALLOONED ) 829 829 830 830 /** -
trunk/src/VBox/VMM/PGMPhys.cpp
r27195 r27543 824 824 return rc; 825 825 } 826 Assert(PGM_PAGE_IS_ZERO(pPage)); 827 PGM_PAGE_SET_STATE(pPage, PGM_PAGE_STATE_BALLOONED); 826 828 } 827 829 … … 1263 1265 } 1264 1266 1267 case PGM_PAGE_STATE_BALLOONED: 1265 1268 case PGM_PAGE_STATE_ALLOCATED: 1266 1269 case PGM_PAGE_STATE_WRITE_MONITORED: … … 1336 1339 } 1337 1340 else 1338 if (!PGM_PAGE_IS_ZERO(pPage)) 1341 if ( !PGM_PAGE_IS_ZERO(pPage) 1342 && !PGM_PAGE_IS_BALLOONED(pPage)) 1339 1343 { 1340 1344 rc = pgmPhysFreePage(pVM, pReq, &cPendingPages, pPage, pRam->GCPhys + ((RTGCPHYS)iPage << PAGE_SHIFT)); … … 1370 1374 case PGM_PAGE_STATE_ZERO: 1371 1375 break; 1376 1377 case PGM_PAGE_STATE_BALLOONED: 1378 /* Turn into a zero page; the balloon status is lost when the VM reboots. */ 1379 PGM_PAGE_SET_STATE(pPage, PGM_PAGE_STATE_ZERO); 1380 break; 1381 1372 1382 case PGM_PAGE_STATE_SHARED: 1373 1383 case PGM_PAGE_STATE_WRITE_MONITORED: 1374 1384 rc = pgmPhysPageMakeWritable(pVM, pPage, pRam->GCPhys + ((RTGCPHYS)iPage << PAGE_SHIFT)); 1375 1385 AssertLogRelRCReturn(rc, rc); 1386 /* no break */ 1387 1376 1388 case PGM_PAGE_STATE_ALLOCATED: 1377 1389 { … … 2781 2793 2782 2794 for (uint32_t iPage = 0; iPage < cPages; iPage++) 2783 if (PGM_PAGE_GET_STATE(&pRom->aPages[iPage].Shadow) != PGM_PAGE_STATE_ZERO) 2795 if ( !PGM_PAGE_IS_ZERO(&pRom->aPages[iPage].Shadow) 2796 && !PGM_PAGE_IS_BALLOONED(&pRom->aPages[iPage].Shadow)) 2784 2797 { 2785 2798 Assert(PGM_PAGE_GET_STATE(&pRom->aPages[iPage].Shadow) == PGM_PAGE_STATE_ALLOCATED); … … 2800 2813 for (uint32_t iPage = 0; iPage < cPages; iPage++) 2801 2814 { 2802 Assert( PGM_PAGE_GET_STATE(&pRom->aPages[iPage].Shadow) != PGM_PAGE_STATE_ZERO);2815 Assert(!PGM_PAGE_IS_ZERO(&pRom->aPages[iPage].Shadow) && !PGM_PAGE_IS_BALLOONED(&pRom->aPages[iPage].Shadow)); 2803 2816 void *pvDstPage; 2804 2817 const RTGCPHYS GCPhys = pRom->GCPhys + (iPage << PAGE_SHIFT); … … 3480 3493 } 3481 3494 3482 if (PGM_PAGE_GET_STATE(pPage) == PGM_PAGE_STATE_ZERO) 3495 if ( PGM_PAGE_IS_ZERO(pPage) 3496 || PGM_PAGE_IS_BALLOONED(pPage)) 3483 3497 return VINF_SUCCESS; 3484 3498 … … 3621 3635 case PGM_PAGE_STATE_ALLOCATED: 3622 3636 break; 3637 case PGM_PAGE_STATE_BALLOONED: 3638 AssertFailed(); 3639 break; 3623 3640 case PGM_PAGE_STATE_ZERO: 3624 3641 case PGM_PAGE_STATE_SHARED: -
trunk/src/VBox/VMM/PGMSavedState.cpp
r27197 r27543 216 216 { 217 217 if (PGMROMPROT_IS_ROM(pRom->aPages[iPage].enmProt)) 218 pRom->aPages[iPage].LiveSave.fWrittenTo = !PGM_PAGE_IS_ZERO(&pRom->aPages[iPage].Shadow) ;218 pRom->aPages[iPage].LiveSave.fWrittenTo = !PGM_PAGE_IS_ZERO(&pRom->aPages[iPage].Shadow) && !PGM_PAGE_IS_BALLOONED(&pRom->aPages[iPage].Shadow); 219 219 else 220 220 { … … 224 224 AssertLogRelMsgRC(rc, ("%Rrc GCPhys=%RGp\n", rc, GCPhys)); 225 225 if (RT_SUCCESS(rc)) 226 pRom->aPages[iPage].LiveSave.fWrittenTo = !PGM_PAGE_IS_ZERO(pPage) ;226 pRom->aPages[iPage].LiveSave.fWrittenTo = !PGM_PAGE_IS_ZERO(pPage) && !PGM_PAGE_IS_BALLOONED(pPage); 227 227 else 228 pRom->aPages[iPage].LiveSave.fWrittenTo = !PGM_PAGE_IS_ZERO(&pRom->aPages[iPage].Shadow) ;228 pRom->aPages[iPage].LiveSave.fWrittenTo = !PGM_PAGE_IS_ZERO(&pRom->aPages[iPage].Shadow) && !PGM_PAGE_IS_BALLOONED(&pRom->aPages[iPage].Shadow); 229 229 } 230 230 } … … 419 419 int rc = VINF_SUCCESS; 420 420 char abPage[PAGE_SIZE]; 421 if (!PGM_PAGE_IS_ZERO(pPage)) 421 if ( !PGM_PAGE_IS_ZERO(pPage) 422 && !PGM_PAGE_IS_BALLOONED(pPage)) 422 423 { 423 424 void const *pvPage; … … 503 504 RTGCPHYS GCPhys = pRom->GCPhys + ((RTGCPHYS)iPage << PAGE_SHIFT); 504 505 PPGMPAGE pPage = PGMROMPROT_IS_ROM(enmProt) ? &pRomPage->Shadow : pgmPhysGetPage(&pVM->pgm.s, GCPhys); 505 bool fZero = PGM_PAGE_IS_ZERO(pPage) ;506 bool fZero = PGM_PAGE_IS_ZERO(pPage) || PGM_PAGE_IS_BALLOONED(pPage); 506 507 int rc = VINF_SUCCESS; 507 508 if (!fZero) … … 1074 1075 { 1075 1076 case PGMPAGETYPE_RAM: 1076 if (PGM_PAGE_IS_ZERO(pPage)) 1077 if ( PGM_PAGE_IS_ZERO(pPage) 1078 || PGM_PAGE_IS_BALLOONED(pPage)) 1077 1079 { 1078 1080 paLSPages[iPage].fZero = 1; … … 1242 1244 { 1243 1245 uint32_t u32Crc = RTCrc32(pvPage, PAGE_SIZE); 1244 Assert( !PGM_PAGE_IS_ZERO(&pCur->aPages[iPage]) || u32Crc == PGM_STATE_CRC32_ZERO_PAGE);1246 Assert((!PGM_PAGE_IS_ZERO(&pCur->aPages[iPage]) && !PGM_PAGE_IS_BALLOONED(&pCur->aPages[iPage])) || u32Crc == PGM_STATE_CRC32_ZERO_PAGE); 1245 1247 AssertMsg(paLSPages[iPage].u32Crc == u32Crc, 1246 1248 ("%08x != %08x for %RGp %R[pgmpage]\n", paLSPages[iPage].u32Crc, u32Crc, … … 1391 1393 1392 1394 case PGM_PAGE_STATE_ZERO: 1395 if (!paLSPages[iPage].fZero) 1396 { 1397 if (!paLSPages[iPage].fDirty) 1398 { 1399 paLSPages[iPage].fDirty = 1; 1400 pVM->pgm.s.LiveSave.Ram.cReadyPages--; 1401 pVM->pgm.s.LiveSave.Ram.cDirtyPages++; 1402 } 1403 paLSPages[iPage].fZero = 1; 1404 paLSPages[iPage].fShared = 0; 1405 #ifdef PGMLIVESAVERAMPAGE_WITH_CRC32 1406 paLSPages[iPage].u32Crc = PGM_STATE_CRC32_ZERO_PAGE; 1407 #endif 1408 } 1409 break; 1410 1411 case PGM_PAGE_STATE_BALLOONED: 1393 1412 if (!paLSPages[iPage].fZero) 1394 1413 { … … 1520 1539 1521 1540 /* 1522 * Only save pages that ha sn't changed since last scan and are dirty.1541 * Only save pages that haven't changed since last scan and are dirty. 1523 1542 */ 1524 1543 if ( uPass != SSM_PASS_FINAL … … 1564 1583 int rc; 1565 1584 RTGCPHYS GCPhys = pCur->GCPhys + ((RTGCPHYS)iPage << PAGE_SHIFT); 1566 bool fZero = PGM_PAGE_IS_ZERO(&pCur->aPages[iPage]) ;1585 bool fZero = PGM_PAGE_IS_ZERO(&pCur->aPages[iPage]) || PGM_PAGE_IS_BALLOONED(&pCur->aPages[iPage]); 1567 1586 1568 1587 if (!fZero) … … 2100 2119 2101 2120 /* I think this should be sufficient. */ 2102 if (!PGM_PAGE_IS_ZERO(pPage)) 2121 if ( !PGM_PAGE_IS_ZERO(pPage) 2122 && !PGM_PAGE_IS_BALLOONED(pPage)) 2103 2123 return VERR_SSM_UNEXPECTED_DATA; 2104 2124 … … 2535 2555 case PGM_STATE_REC_RAM_ZERO: 2536 2556 { 2537 if (PGM_PAGE_IS_ZERO(pPage)) 2557 if ( PGM_PAGE_IS_ZERO(pPage) 2558 || PGM_PAGE_IS_BALLOONED(pPage)) 2538 2559 break; 2539 2560 /** @todo implement zero page replacing. */ … … 2703 2724 { 2704 2725 case PGM_STATE_REC_ROM_SHW_ZERO: 2705 if (PGM_PAGE_IS_ZERO(pRealPage)) 2726 if ( PGM_PAGE_IS_ZERO(pRealPage) 2727 || PGM_PAGE_IS_BALLOONED(pRealPage)) 2706 2728 break; 2707 2729 /** @todo implement zero page replacing. */
Note:
See TracChangeset
for help on using the changeset viewer.