Changeset 17489 in vbox
- Timestamp:
- Mar 6, 2009 4:35:33 PM (16 years ago)
- svn:sync-xref-src-repo-rev:
- 43916
- Location:
- trunk
- Files:
-
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/include/VBox/pgm.h
r17465 r17489 288 288 VMMDECL(RTHCPHYS) PGMGetHyperCR3(PVM pVM); 289 289 VMMDECL(RTHCPHYS) PGMGetNestedCR3(PVM pVM, PGMMODE enmShadowMode); 290 VMMDECL(RTHCPHYS) PGMGetEPTCR3(PVM pVM);291 290 VMMDECL(RTHCPHYS) PGMGetHyper32BitCR3(PVM pVM); 292 291 VMMDECL(RTHCPHYS) PGMGetHyperPaeCR3(PVM pVM); -
trunk/src/VBox/VMM/HWACCM.cpp
r17379 r17489 848 848 { 849 849 LogRel(("HWACCM: Enabled nested paging\n")); 850 LogRel(("HWACCM: EPT root page = %RHp\n", PGMGet EPTCR3(pVM)));850 LogRel(("HWACCM: EPT root page = %RHp\n", PGMGetHyperCR3(pVM))); 851 851 } 852 852 if (pVM->hwaccm.s.vmx.fVPID) -
trunk/src/VBox/VMM/PGM.cpp
r17371 r17489 1492 1492 pVM->pgm.s.pShwPaePdptR0 = (uintptr_t)pVM->pgm.s.pShwPaePdptR3; 1493 1493 # endif 1494 pVM->pgm.s.pShwNestedRootR3 = MMR3PageAllocLow(pVM); 1495 # ifndef VBOX_WITH_2X_4GB_ADDR_SPACE 1496 pVM->pgm.s.pShwNestedRootR0 = (uintptr_t)pVM->pgm.s.pShwNestedRootR3; 1497 # endif 1494 1498 #endif /* VBOX_WITH_PGMPOOL_PAGING_ONLY */ 1495 pVM->pgm.s.pShwNestedRootR3 = MMR3PageAllocLow(pVM); 1496 #ifndef VBOX_WITH_2X_4GB_ADDR_SPACE 1497 pVM->pgm.s.pShwNestedRootR0 = (uintptr_t)pVM->pgm.s.pShwNestedRootR3; 1498 #endif 1499 1500 #ifdef VBOX_WITH_PGMPOOL_PAGING_ONLY 1501 if (!pVM->pgm.s.pShwNestedRootR3) 1502 #else 1499 1500 #ifndef VBOX_WITH_PGMPOOL_PAGING_ONLY 1503 1501 if ( !pVM->pgm.s.pShw32BitPdR3 1504 1502 || !pVM->pgm.s.apShwPaePDsR3[0] … … 1523 1521 pVM->pgm.s.aHCPhysPaePDs[3] = MMPage2Phys(pVM, pVM->pgm.s.apShwPaePDsR3[3]); 1524 1522 pVM->pgm.s.HCPhysShwPaePdpt = MMPage2Phys(pVM, pVM->pgm.s.pShwPaePdptR3); 1525 #endif1526 1523 pVM->pgm.s.HCPhysShwNestedRoot = MMPage2Phys(pVM, pVM->pgm.s.pShwNestedRootR3); 1524 #endif 1527 1525 1528 1526 /* … … 1532 1530 ASMMemZero32(pVM->pgm.s.pShw32BitPdR3, PAGE_SIZE); 1533 1531 ASMMemZero32(pVM->pgm.s.pShwPaePdptR3, PAGE_SIZE); 1534 #endif1535 1532 ASMMemZero32(pVM->pgm.s.pShwNestedRootR3, PAGE_SIZE); 1536 #ifndef VBOX_WITH_PGMPOOL_PAGING_ONLY 1533 1537 1534 for (unsigned i = 0; i < RT_ELEMENTS(pVM->pgm.s.apShwPaePDsR3); i++) 1538 1535 { … … 2018 2015 pVM->pgm.s.GCPtrCR3Mapping += offDelta; 2019 2016 /** @todo move this into shadow and guest specific relocation functions. */ 2020 #ifdef VBOX_WITH_PGMPOOL_PAGING_ONLY 2021 AssertMsg(pVM->pgm.s.pShwNestedRootR3, ("Init order, no relocation before paging is initialized!\n")); 2022 #else 2017 #ifndef VBOX_WITH_PGMPOOL_PAGING_ONLY 2023 2018 AssertMsg(pVM->pgm.s.pShw32BitPdR3, ("Init order, no relocation before paging is initialized!\n")); 2024 2019 pVM->pgm.s.pShw32BitPdRC += offDelta; -
trunk/src/VBox/VMM/PGMInternal.h
r17486 r17489 2420 2420 RTRCPTR alignment5; /**< structure size alignment. */ 2421 2421 # endif 2422 #endif /* !VBOX_WITH_PGMPOOL_PAGING_ONLY */2423 2422 /** @name Nested Shadow Paging 2424 2423 * @{ */ … … 2432 2431 RTHCPHYS HCPhysShwNestedRoot; 2433 2432 /** @} */ 2433 #endif /* !VBOX_WITH_PGMPOOL_PAGING_ONLY */ 2434 2434 2435 2435 /** @name Function pointers for Shadow paging. -
trunk/src/VBox/VMM/PGMMap.cpp
r17228 r17489 60 60 { 61 61 LogFlow(("PGMR3MapPT: GCPtr=%#x cb=%d pfnRelocate=%p pvUser=%p pszDesc=%s\n", GCPtr, cb, pfnRelocate, pvUser, pszDesc)); 62 AssertMsg(pVM->pgm.s.pInterPD && pVM->pgm.s.pShwNestedRootR3, ("Paging isn't initialized, init order problems!\n"));62 AssertMsg(pVM->pgm.s.pInterPD, ("Paging isn't initialized, init order problems!\n")); 63 63 64 64 /* -
trunk/src/VBox/VMM/PGMPool.cpp
r17421 r17489 309 309 pPool->aPages[PGMPOOL_IDX_NESTED_ROOT].Core.Key = NIL_RTHCPHYS; 310 310 pPool->aPages[PGMPOOL_IDX_NESTED_ROOT].GCPhys = NIL_RTGCPHYS; 311 #ifdef VBOX_WITH_PGMPOOL_PAGING_ONLY 312 pPool->aPages[PGMPOOL_IDX_NESTED_ROOT].pvPageR3 = 0; 313 #else 311 314 pPool->aPages[PGMPOOL_IDX_NESTED_ROOT].pvPageR3 = pVM->pgm.s.pShwNestedRootR3; 315 #endif 312 316 pPool->aPages[PGMPOOL_IDX_NESTED_ROOT].enmKind = PGMPOOLKIND_ROOT_NESTED; 313 317 pPool->aPages[PGMPOOL_IDX_NESTED_ROOT].idx = PGMPOOL_IDX_NESTED_ROOT; -
trunk/src/VBox/VMM/PGMShw.h
r17486 r17489 184 184 PGM_SHW_DECL(int, Enter)(PVM pVM) 185 185 { 186 # if PGM_SHW_TYPE == PGM_TYPE_NESTED 186 #ifdef VBOX_WITH_PGMPOOL_PAGING_ONLY 187 # if PGM_SHW_TYPE == PGM_TYPE_NESTED || PGM_SHW_TYPE == PGM_TYPE_EPT 188 RTGCPHYS GCPhysCR3 = RT_BIT_64(63); 189 PPGMPOOLPAGE pNewShwPageCR3; 190 PPGMPOOL pPool = pVM->pgm.s.CTX_SUFF(pPool); 191 187 192 Assert(HWACCMIsNestedPagingActive(pVM)); 188 193 189 Log(("Enter nested shadow paging mode: root %RHv phys %RHp\n", pVM->pgm.s.pShwNestedRootR3, pVM->pgm.s.HCPhysShwNestedRoot)); 190 /* In non-nested mode we allocate the PML4 page on-demand; in nested mode we just use our fixed nested paging root. */ 191 # ifdef VBOX_WITH_PGMPOOL_PAGING_ONLY 192 PPGMPOOL pPool = pVM->pgm.s.CTX_SUFF(pPool); 194 int rc = pgmPoolAlloc(pVM, GCPhysCR3, PGMPOOLKIND_ROOT_NESTED, PGMPOOL_IDX_NESTED_ROOT, GCPhysCR3 >> PAGE_SHIFT, &pNewShwPageCR3); 195 AssertFatal(rc == VINF_SUCCESS); 196 197 /* Mark the page as locked; disallow flushing. */ 198 pgmPoolLockPage(pPool, pNewShwPageCR3); 193 199 194 200 pVM->pgm.s.iShwUser = PGMPOOL_IDX_NESTED_ROOT; 195 pVM->pgm.s.iShwUserTable = 0; 196 pVM->pgm.s.pShwPageCR3R3 = &pPool->aPages[PGMPOOL_IDX_NESTED_ROOT]; 197 pVM->pgm.s.pShwPageCR3R0 = MMHyperCCToR0(pVM, pVM->pgm.s.CTX_SUFF(pShwPageCR3)); 198 199 /* Mark the page as locked; disallow flushing (shouldn't be necessary as it's a special root) */ 200 pgmPoolLockPage(pPool, pVM->pgm.s.pShwPageCR3R3); 201 pVM->pgm.s.iShwUserTable = GCPhysCR3 >> PAGE_SHIFT; 202 pVM->pgm.s.pShwPageCR3R3 = pNewShwPageCR3; 203 204 pVM->pgm.s.pShwPageCR3RC = MMHyperCCToRC(pVM, pVM->pgm.s.pShwPageCR3R3); 205 pVM->pgm.s.pShwPageCR3R0 = MMHyperCCToR0(pVM, pVM->pgm.s.pShwPageCR3R3); 206 207 Log(("Enter nested shadow paging mode: root %RHv phys %RHp\n", pVM->pgm.s.pShwPageCR3R3, pVM->pgm.s.CTX_SUFF(pShwPageCR3)->Core.Key)); 201 208 # else 202 # ifndef VBOX_WITH_2X_4GB_ADDR_SPACE 209 # if PGM_SHW_TYPE == PGM_TYPE_NESTED 210 # ifndef VBOX_WITH_2X_4GB_ADDR_SPACE 203 211 pVM->pgm.s.pShwRootR0 = (R0PTRTYPE(void *))pVM->pgm.s.pShwNestedRootR0; 204 # else212 # else 205 213 pVM->pgm.s.pShwRootR3 = (R3PTRTYPE(void *))pVM->pgm.s.pShwNestedRootR3; 214 # endif 215 pVM->pgm.s.HCPhysShwCR3 = pVM->pgm.s.HCPhysShwNestedRoot; 206 216 # endif 207 pVM->pgm.s.HCPhysShwCR3 = pVM->pgm.s.HCPhysShwNestedRoot; 217 218 CPUMSetHyperCR3(pVM, PGMGetHyperCR3(pVM)); 208 219 # endif 209 210 CPUMSetHyperCR3(pVM, PGMGetHyperCR3(pVM));211 220 #endif 212 221 -
trunk/src/VBox/VMM/VMMAll/PGMAll.cpp
r17483 r17489 1228 1228 Assert(HWACCMIsNestedPagingActive(pVM)); 1229 1229 1230 #ifdef VBOX_WITH_PGMPOOL_PAGING_ONLY 1231 pPml4 = (PEPTPML4)PGMPOOL_PAGE_2_PTR_BY_PGM(pPGM, pPGM->CTX_SUFF(pShwPageCR3)); 1232 #else 1230 1233 # ifdef VBOX_WITH_2X_4GB_ADDR_SPACE_IN_R0 1231 1234 rc = PGM_HCPHYS_2_PTR(pVM, pPGM->HCPhysShwNestedRoot, &pPml4); … … 1234 1237 pPml4 = (PEPTPML4)pPGM->CTX_SUFF(pShwNestedRoot); 1235 1238 # endif 1239 #endif /* VBOX_WITH_PGMPOOL_PAGING_ONLY */ 1236 1240 Assert(pPml4); 1237 1241 … … 1488 1492 } 1489 1493 #endif 1490 }1491 1492 1493 /**1494 * Gets the current CR3 register value for the EPT paging memory context.1495 * @returns CR3 value.1496 * @param pVM The VM handle.1497 */1498 VMMDECL(RTHCPHYS) PGMGetEPTCR3(PVM pVM)1499 {1500 return pVM->pgm.s.HCPhysShwNestedRoot;1501 1494 } 1502 1495 -
trunk/src/VBox/VMM/VMMR0/HWVMXR0.cpp
r17284 r17489 1498 1498 if (pVM->hwaccm.s.fNestedPaging) 1499 1499 { 1500 AssertMsg( PGMGetEPTCR3(pVM) == PGMGetHyperCR3(pVM) 1501 || VM_FF_ISPENDING(pVM, VM_FF_PGM_SYNC_CR3 | VM_FF_PGM_SYNC_CR3_NON_GLOBAL), 1502 ("%RHp vs %RHp\n", PGMGetEPTCR3(pVM), PGMGetHyperCR3(pVM))); 1503 pVCpu->hwaccm.s.vmx.GCPhysEPTP = PGMGetEPTCR3(pVM); 1500 Assert(PGMGetHyperCR3(pVM)); 1501 pVCpu->hwaccm.s.vmx.GCPhysEPTP = PGMGetHyperCR3(pVM); 1504 1502 1505 1503 Assert(!(pVCpu->hwaccm.s.vmx.GCPhysEPTP & 0xfff));
Note:
See TracChangeset
for help on using the changeset viewer.