- Timestamp:
- Mar 19, 2010 3:24:22 PM (15 years ago)
- Location:
- trunk/src/VBox/VMM/VMMAll
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/PGMAllBth.h
r27490 r27540 807 807 Log(("PGM #PF: Make writable: %RGp %R[pgmpage] pvFault=%RGp uErr=%#x\n", GCPhys, pPage, pvFault, uErr)); 808 808 Assert(!PGM_PAGE_IS_ZERO(pPage)); 809 AssertFatalMsg(!PGM_PAGE_IS_BALLOONED(pPage), ("Unexpected ballooned page at %RGp\n", GCPhys)); 809 810 810 811 rc = pgmPhysPageMakeWritable(pVM, pPage, GCPhys); … … 1402 1403 if (RT_SUCCESS(rc)) 1403 1404 { 1405 /* Ignore ballooned pages. Don't return errors or use a fatal assert here as part of a shadow sync range might included ballooned pages. */ 1406 if (PGM_PAGE_IS_BALLOONED(pPage)) 1407 return; 1408 1404 1409 #ifndef VBOX_WITH_NEW_LAZY_PAGE_ALLOC 1405 1410 /* Try to make the page writable if necessary. */ … … 1411 1416 && PGM_PAGE_GET_STATE(pPage) != PGM_PAGE_STATE_WRITE_MONITORED 1412 1417 # endif 1413 && PGM_PAGE_GET_TYPE(pPage) == PGMPAGETYPE_RAM)1418 ) 1414 1419 ) 1415 1420 ) … … 1795 1800 if (RT_SUCCESS(rc)) 1796 1801 { 1802 AssertFatalMsg(!PGM_PAGE_IS_BALLOONED(pPage), ("Unexpected ballooned page at %RGp\n", GCPhys)); 1803 1797 1804 # ifndef VBOX_WITH_NEW_LAZY_PAGE_ALLOC 1798 1805 /* Try to make the page writable if necessary. */ … … 1804 1811 && PGM_PAGE_GET_STATE(pPage) != PGM_PAGE_STATE_WRITE_MONITORED 1805 1812 # endif 1806 && PGM_PAGE_GET_TYPE(pPage) == PGMPAGETYPE_RAM)1813 ) 1807 1814 ) 1808 1815 ) … … 1826 1833 PteDst.u = 0; 1827 1834 } 1835 1828 1836 const unsigned iPTDst = (GCPtrPage >> SHW_PT_SHIFT) & SHW_PT_MASK; 1829 if (PteDst.n.u1Present && !pPTDst->a[iPTDst].n.u1Present) 1837 if ( PteDst.n.u1Present 1838 && !pPTDst->a[iPTDst].n.u1Present) 1830 1839 PGM_BTH_NAME(SyncPageWorkerTrackAddref)(pVCpu, pShwPage, PGM_PAGE_GET_TRACKING(pPage), pPage, iPTDst); 1831 1840 … … 2833 2842 && PGM_PAGE_GET_STATE(pPage) != PGM_PAGE_STATE_WRITE_MONITORED 2834 2843 # endif 2835 && PGM_PAGE_GET_TYPE(pPage) == PGMPAGETYPE_RAM)2844 && !PGM_PAGE_IS_BALLOONED(pPage)) 2836 2845 ) 2837 2846 ) … … 2853 2862 else 2854 2863 PteDst.u = 0; 2864 } 2865 else 2866 if (PGM_PAGE_IS_BALLOONED(pPage)) 2867 { 2868 /* Skip ballooned pages. */ 2869 PteDst.u = 0; 2855 2870 } 2856 2871 # ifndef IN_RING0 -
trunk/src/VBox/VMM/VMMAll/PGMAllPhys.cpp
r27488 r27540 673 673 case PGM_PAGE_STATE_SHARED: 674 674 return pgmPhysAllocPage(pVM, pPage, GCPhys); 675 676 /* Not allowed to write to ballooned pages. */ 677 case PGM_PAGE_STATE_BALLOONED: 678 return VERR_PGM_PHYS_PAGE_BALLOONED; 675 679 } 676 680 } … … 1009 1013 PPGMPAGE pPage = &pRam->aPages[off >> PAGE_SHIFT]; 1010 1014 PPGMPAGEMAPTLBE pTlbe = &pPGM->CTXSUFF(PhysTlb).aEntries[PGM_PAGEMAPTLB_IDX(GCPhys)]; 1011 if (!PGM_PAGE_IS_ZERO(pPage)) 1015 if ( !PGM_PAGE_IS_ZERO(pPage) 1016 && !PGM_PAGE_IS_BALLOONED(pPage)) 1012 1017 { 1013 1018 void *pv; … … 1058 1063 */ 1059 1064 PPGMPAGEMAPTLBE pTlbe = &pPGM->CTXSUFF(PhysTlb).aEntries[PGM_PAGEMAPTLB_IDX(GCPhys)]; 1060 if (!PGM_PAGE_IS_ZERO(pPage)) 1065 if ( !PGM_PAGE_IS_ZERO(pPage) 1066 && !PGM_PAGE_IS_BALLOONED(pPage)) 1061 1067 { 1062 1068 void *pv; -
trunk/src/VBox/VMM/VMMAll/PGMAllPool.cpp
r27465 r27540 3381 3381 * will be needed for this problem of course, but it will have to wait... 3382 3382 */ 3383 if (PGM_PAGE_IS_ZERO(pPhysPage)) 3383 if ( PGM_PAGE_IS_ZERO(pPhysPage) 3384 || PGM_PAGE_IS_BALLOONED(pPhysPage)) 3384 3385 rc = VINF_PGM_GCPHYS_ALIASED; 3385 3386 else
Note:
See TracChangeset
for help on using the changeset viewer.