- Timestamp:
- Mar 9, 2009 9:46:40 AM (16 years ago)
- svn:sync-xref-src-repo-rev:
- 43995
- Location:
- trunk/src/VBox/VMM
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/PGM.cpp
r17529 r17556 2241 2241 if (RT_SUCCESS(rc)) 2242 2242 { 2243 #ifdef VBOX_WITH_PGMPOOL_PAGING_ONLY2244 /* Force a shadow mode reinit (necessary for nested paging and ept). */2245 pVM->pgm.s.enmShadowMode = PGMMODE_INVALID;2246 #endif2247 2243 /* 2248 2244 * Switch mode back to real mode. -
trunk/src/VBox/VMM/PGMShw.h
r17493 r17556 191 191 192 192 Assert(HWACCMIsNestedPagingActive(pVM)); 193 Assert(!pVM->pgm.s.pShwPageCR3R3); 193 194 194 195 int rc = pgmPoolAlloc(pVM, GCPhysCR3, PGMPOOLKIND_ROOT_NESTED, PGMPOOL_IDX_NESTED_ROOT, GCPhysCR3 >> PAGE_SHIFT, &pNewShwPageCR3); … … 246 247 PGM_SHW_DECL(int, Exit)(PVM pVM) 247 248 { 248 #ifndef VBOX_WITH_PGMPOOL_PAGING_ONLY 249 #ifdef VBOX_WITH_PGMPOOL_PAGING_ONLY 250 if (pVM->pgm.s.CTX_SUFF(pShwPageCR3)) 251 { 252 PPGMPOOL pPool = pVM->pgm.s.CTX_SUFF(pPool); 253 254 Assert(pVM->pgm.s.iShwUser == PGMPOOL_IDX_NESTED_ROOT); 255 256 /* Mark the page as unlocked; allow flushing again. */ 257 pgmPoolUnlockPage(pPool, pVM->pgm.s.CTX_SUFF(pShwPageCR3)); 258 259 pgmPoolFreeByPage(pPool, pVM->pgm.s.CTX_SUFF(pShwPageCR3), pVM->pgm.s.iShwUser, pVM->pgm.s.iShwUserTable); 260 pVM->pgm.s.pShwPageCR3R3 = 0; 261 pVM->pgm.s.pShwPageCR3R0 = 0; 262 pVM->pgm.s.pShwPageCR3RC = 0; 263 pVM->pgm.s.iShwUser = 0; 264 pVM->pgm.s.iShwUserTable = 0; 265 } 266 #else 249 267 # if PGM_SHW_TYPE == PGM_TYPE_NESTED 250 268 Assert(HWACCMIsNestedPagingActive(pVM)); -
trunk/src/VBox/VMM/VMMAll/PGMAllPool.cpp
r17509 r17556 4156 4156 #endif /* PGMPOOL_WITH_USER_TRACKING */ 4157 4157 4158 4159 #ifdef IN_RING3 4158 4160 /** 4159 4161 * Flushes all the special root pages as part of a pgmPoolFlushAllInt operation. … … 4256 4258 /* Unmap the old CR3 value before flushing everything. */ 4257 4259 int rc = PGM_BTH_PFN(UnmapCR3, pVM)(pVM); 4260 AssertRC(rc); 4261 4262 /* Exit the current shadow paging mode as well; nested paging and EPT use a root CR3 which will get flushed here. */ 4263 rc = PGM_SHW_PFN(Exit, pVM)(pVM); 4258 4264 AssertRC(rc); 4259 4265 #endif … … 4403 4409 } 4404 4410 4411 #ifdef VBOX_WITH_PGMPOOL_PAGING_ONLY 4412 /* Force a shadow mode reinit (necessary for nested paging and ept). */ 4413 pVM->pgm.s.enmShadowMode = PGMMODE_INVALID; 4414 4415 /* Reinit the current shadow paging mode as well; nested paging and EPT use a root CR3 which will get flushed here. */ 4416 rc = PGMR3ChangeMode(pVM, PGMGetGuestMode(pVM)); 4417 AssertRC(rc); 4418 #endif 4419 4405 4420 /* 4406 4421 * Finally, assert the FF. … … 4410 4425 STAM_PROFILE_STOP(&pPool->StatFlushAllInt, a); 4411 4426 } 4412 4427 #endif /* IN_RING3 */ 4413 4428 4414 4429 /** … … 4781 4796 } 4782 4797 4783 4798 #ifdef IN_RING3 4784 4799 /** 4785 4800 * Flushes the entire cache. … … 4795 4810 pgmPoolFlushAllInt(pVM->pgm.s.CTX_SUFF(pPool)); 4796 4811 } 4812 #endif 4797 4813 4798 4814 #ifdef LOG_ENABLED
Note:
See TracChangeset
for help on using the changeset viewer.