Changeset 16172 in vbox
- Timestamp:
- Jan 22, 2009 3:09:31 PM (16 years ago)
- Location:
- trunk/src/VBox/VMM
- Files:
-
- 7 edited
-
PGM.cpp (modified) (1 diff)
-
PGMInternal.h (modified) (4 diffs)
-
PGMShw.h (modified) (2 diffs)
-
VMMAll/PGMAll.cpp (modified) (4 diffs)
-
VMMAll/PGMAllBth.h (modified) (4 diffs)
-
VMMAll/PGMAllGst.h (modified) (3 diffs)
-
testcase/tstVMStructGC.cpp (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/PGM.cpp
r16113 r16172 1529 1529 #if HC_ARCH_BITS == 64 1530 1530 # ifndef VBOX_WITH_PGMPOOL_PAGING_ONLY 1531 LogRel(("Debug: HCPhysShw32BitPD=%RHp aHCPhysPaePDs={%RHp,%RHp,%RHp,%RHp} HCPhysShwPaePdpt=%RHp HCPhysShwPaePml4=%RHp\n",1531 LogRel(("Debug: HCPhysShw32BitPD=%RHp aHCPhysPaePDs={%RHp,%RHp,%RHp,%RHp} HCPhysShwPaePdpt=%RHp\n", 1532 1532 pVM->pgm.s.HCPhysShw32BitPD, 1533 1533 pVM->pgm.s.aHCPhysPaePDs[0], pVM->pgm.s.aHCPhysPaePDs[1], pVM->pgm.s.aHCPhysPaePDs[2], pVM->pgm.s.aHCPhysPaePDs[3], 1534 pVM->pgm.s.HCPhysShwPaePdpt, 1535 pVM->pgm.s.HCPhysShwPaePml4)); 1534 pVM->pgm.s.HCPhysShwPaePdpt)); 1536 1535 # endif 1537 1536 LogRel(("Debug: HCPhysInterPD=%RHp HCPhysInterPaePDPT=%RHp HCPhysInterPaePML4=%RHp\n", -
trunk/src/VBox/VMM/PGMInternal.h
r16045 r16172 2227 2227 /** @} */ 2228 2228 2229 /** @name 32-bit Shadow Paging2229 /** @name Shadow paging 2230 2230 * @{ */ 2231 #ifdef VBOX_WITH_PGMPOOL_PAGING_ONLY 2231 /** The root page table - R3 Ptr. */ 2232 R3PTRTYPE(void *) pShwRootR3; 2233 # ifndef VBOX_WITH_2X_4GB_ADDR_SPACE 2234 /** The root page table - R0 Ptr. */ 2235 R0PTRTYPE(void *) pShwRootR0; 2236 # endif 2232 2237 /** The Physical Address (HC) of the current active shadow CR3. */ 2233 2238 RTHCPHYS HCPhysShwCR3; … … 2241 2246 RTRCPTR alignment6; /**< structure size alignment. */ 2242 2247 # endif 2243 #else 2248 /** @} */ 2249 #ifndef VBOX_WITH_PGMPOOL_PAGING_ONLY 2250 /** @name 32-bit Shadow Paging 2251 * @{ */ 2244 2252 /** The 32-Bit PD - R3 Ptr. */ 2245 2253 R3PTRTYPE(PX86PD) pShw32BitPdR3; … … 2284 2292 RTRCPTR alignment5; /**< structure size alignment. */ 2285 2293 # endif 2286 2287 /** @name AMD64 Shadow Paging2288 * Extends PAE Paging.2289 * @{ */2290 /** The Page Map Level 4 table - R3 Ptr. */2291 R3PTRTYPE(PX86PML4) pShwPaePml4R3;2292 # ifndef VBOX_WITH_2X_4GB_ADDR_SPACE2293 /** The Page Map Level 4 table - R0 Ptr. */2294 R0PTRTYPE(PX86PML4) pShwPaePml4R0;2295 # endif2296 /** The Physical Address (HC) of the Page Map Level 4 table. */2297 RTHCPHYS HCPhysShwPaePml4;2298 /** The pgm pool page descriptor for the current active CR3 - R3 Ptr. */2299 R3PTRTYPE(PPGMPOOLPAGE) pShwAmd64CR3R3;2300 /** The pgm pool page descriptor for the current active CR3 - R0 Ptr. */2301 R0PTRTYPE(PPGMPOOLPAGE) pShwAmd64CR3R0;2302 /** @}*/2303 2294 2304 2295 /** @name Nested Shadow Paging … … 4309 4300 return pShwPml4; 4310 4301 # else 4311 Assert(pPGM->CTX_SUFF(pShw PaePml4));4312 return pPGM->CTX_SUFF(pShwPaePml4);4302 Assert(pPGM->CTX_SUFF(pShwRoot)); 4303 return (PX86PML4)pPGM->CTX_SUFF(pShwRoot); 4313 4304 # endif 4314 4305 #endif -
trunk/src/VBox/VMM/PGMShw.h
r14151 r16172 143 143 Log(("Enter nested shadow paging mode: root %RHv phys %RHp\n", pVM->pgm.s.pShwNestedRootR3, pVM->pgm.s.HCPhysShwNestedRoot)); 144 144 /* In non-nested mode we allocate the PML4 page on-demand; in nested mode we just use our fixed nested paging root. */ 145 pVM->pgm.s.pShw PaePml4R3 = (R3PTRTYPE(PX86PML4))pVM->pgm.s.pShwNestedRootR3;145 pVM->pgm.s.pShwRootR3 = (R3PTRTYPE(void *))pVM->pgm.s.pShwNestedRootR3; 146 146 # ifndef VBOX_WITH_2X_4GB_ADDR_SPACE 147 pVM->pgm.s.pShw PaePml4R0 = (R0PTRTYPE(PX86PML4))pVM->pgm.s.pShwNestedRootR0;147 pVM->pgm.s.pShwRootR0 = (R0PTRTYPE(void *))pVM->pgm.s.pShwNestedRootR0; 148 148 # endif 149 pVM->pgm.s.HCPhysShw PaePml4= pVM->pgm.s.HCPhysShwNestedRoot;149 pVM->pgm.s.HCPhysShwCR3 = pVM->pgm.s.HCPhysShwNestedRoot; 150 150 #endif 151 151 return VINF_SUCCESS; … … 177 177 #if PGM_SHW_TYPE == PGM_TYPE_NESTED 178 178 Assert(HWACCMIsNestedPagingActive(pVM)); 179 pVM->pgm.s.pShw PaePml4R3 = 0;179 pVM->pgm.s.pShwRootR3 = 0; 180 180 # ifndef VBOX_WITH_2X_4GB_ADDR_SPACE 181 pVM->pgm.s.pShw PaePml4R0 = 0;181 pVM->pgm.s.pShwRootR0 = 0; 182 182 # endif 183 pVM->pgm.s.HCPhysShw PaePml4= 0;183 pVM->pgm.s.HCPhysShwCR3 = 0; 184 184 Log(("Leave nested shadow paging mode\n")); 185 185 #endif -
trunk/src/VBox/VMM/VMMAll/PGMAll.cpp
r15990 r16172 931 931 * trustworthy? (Remove pgmGstGetLongModePML4E if pGstPml4e and pGstPdpe 932 932 * are fine.) */ 933 Assert(pVM->pgm.s.CTX_SUFF(pShw Amd64CR3));933 Assert(pVM->pgm.s.CTX_SUFF(pShwPageCR3)); 934 934 Pml4eGst = pgmGstGetLongModePML4E(&pVM->pgm.s, iPml4); 935 935 936 936 rc = pgmPoolAlloc(pVM, Pml4eGst.u & X86_PML4E_PG_MASK, 937 PGMPOOLKIND_64BIT_PDPT_FOR_64BIT_PDPT, pVM->pgm.s.CTX_SUFF(pShw Amd64CR3)->idx, iPml4, &pShwPage);937 PGMPOOLKIND_64BIT_PDPT_FOR_64BIT_PDPT, pVM->pgm.s.CTX_SUFF(pShwPageCR3)->idx, iPml4, &pShwPage); 938 938 } 939 939 else … … 1275 1275 case PGMMODE_AMD64: 1276 1276 case PGMMODE_AMD64_NX: 1277 return pVM->pgm.s.HCPhysShw PaePml4;1277 return pVM->pgm.s.HCPhysShwCR3; 1278 1278 1279 1279 case PGMMODE_EPT: … … 1308 1308 case PGMMODE_AMD64: 1309 1309 case PGMMODE_AMD64_NX: 1310 return pVM->pgm.s.HCPhysShw PaePml4;1310 return pVM->pgm.s.HCPhysShwCR3; 1311 1311 1312 1312 default: … … 1357 1357 VMMDECL(RTHCPHYS) PGMGetHyperAmd64CR3(PVM pVM) 1358 1358 { 1359 return pVM->pgm.s.HCPhysShw PaePml4;1359 return pVM->pgm.s.HCPhysShwCR3; 1360 1360 } 1361 1361 -
trunk/src/VBox/VMM/VMMAll/PGMAllBth.h
r15410 r16172 910 910 # else /* PGM_SHW_TYPE == PGM_TYPE_AMD64 */ 911 911 /* PML4 */ 912 AssertReturn( pVM->pgm.s.pShwPaePml4R3, VERR_INTERNAL_ERROR);912 AssertReturn(CTX_SUFF(pVM->pgm.s.pShwRoot), VERR_INTERNAL_ERROR); 913 913 914 914 const unsigned iPml4 = (GCPtrPage >> X86_PML4_SHIFT) & X86_PML4_MASK; … … 1021 1021 LogFlow(("InvalidatePage: Out-of-sync PML4E (P/GCPhys) at %RGv GCPhys=%RGp vs %RGp Pml4eSrc=%RX64 Pml4eDst=%RX64\n", 1022 1022 GCPtrPage, pShwPdpt->GCPhys, GCPhysPdpt, (uint64_t)pPml4eSrc->u, (uint64_t)pPml4eDst->u)); 1023 pgmPoolFreeByPage(pPool, pShwPdpt, pVM->pgm.s.CTX_SUFF(pShw Amd64CR3)->idx, iPml4);1023 pgmPoolFreeByPage(pPool, pShwPdpt, pVM->pgm.s.CTX_SUFF(pShwPageCR3)->idx, iPml4); 1024 1024 pPml4eDst->u = 0; 1025 1025 STAM_COUNTER_INC(&pVM->pgm.s.CTX_MID_Z(Stat,InvalidatePagePDNPs)); … … 1035 1035 LogFlow(("InvalidatePage: Out-of-sync PML4E at %RGv Pml4eSrc=%RX64 Pml4eDst=%RX64\n", 1036 1036 GCPtrPage, (uint64_t)pPml4eSrc->u, (uint64_t)pPml4eDst->u)); 1037 pgmPoolFreeByPage(pPool, pShwPdpt, pVM->pgm.s.CTX_SUFF(pShw Amd64CR3)->idx, iPml4);1037 pgmPoolFreeByPage(pPool, pShwPdpt, pVM->pgm.s.CTX_SUFF(pShwPageCR3)->idx, iPml4); 1038 1038 pPml4eDst->u = 0; 1039 1039 STAM_COUNTER_INC(&pVM->pgm.s.CTX_MID_Z(Stat,InvalidatePagePDOutOfSync)); … … 1047 1047 LogFlow(("InvalidatePage: Out-of-sync PML4E (A) at %RGv Pml4eSrc=%RX64 Pml4eDst=%RX64\n", 1048 1048 GCPtrPage, (uint64_t)pPml4eSrc->u, (uint64_t)pPml4eDst->u)); 1049 pgmPoolFreeByPage(pPool, pShwPdpt, pVM->pgm.s.CTX_SUFF(pShw Amd64CR3)->idx, iPml4);1049 pgmPoolFreeByPage(pPool, pShwPdpt, pVM->pgm.s.CTX_SUFF(pShwPageCR3)->idx, iPml4); 1050 1050 pPml4eDst->u = 0; 1051 1051 STAM_COUNTER_INC(&pVM->pgm.s.CTX_MID_Z(Stat,InvalidatePagePDNAs)); -
trunk/src/VBox/VMM/VMMAll/PGMAllGst.h
r15410 r16172 517 517 /** @todo Move this into PGMAllBth.h. */ 518 518 PPGMPOOL pPool = pVM->pgm.s.CTX_SUFF(pPool); 519 if (pVM->pgm.s.CTX_SUFF(pShw Amd64CR3))519 if (pVM->pgm.s.CTX_SUFF(pShwPageCR3)) 520 520 { 521 521 /* It might have been freed already by a pool flush (see e.g. PGMR3MappingsUnfix). */ 522 522 /** @todo Coordinate this better with the pool. */ 523 if (pVM->pgm.s.CTX_SUFF(pShw Amd64CR3)->enmKind != PGMPOOLKIND_FREE)524 pgmPoolFreeByPage(pPool, pVM->pgm.s.CTX_SUFF(pShw Amd64CR3), PGMPOOL_IDX_AMD64_CR3, pVM->pgm.s.CTX_SUFF(pShwAmd64CR3)->GCPhys >> PAGE_SHIFT);525 pVM->pgm.s.pShw Amd64CR3R3= 0;526 pVM->pgm.s.pShw Amd64CR3R0= 0;527 pVM->pgm.s.pShw PaePml4R3 = 0;523 if (pVM->pgm.s.CTX_SUFF(pShwPageCR3)->enmKind != PGMPOOLKIND_FREE) 524 pgmPoolFreeByPage(pPool, pVM->pgm.s.CTX_SUFF(pShwPageCR3), PGMPOOL_IDX_AMD64_CR3, pVM->pgm.s.CTX_SUFF(pShwPageCR3)->GCPhys >> PAGE_SHIFT); 525 pVM->pgm.s.pShwPageCR3R3 = 0; 526 pVM->pgm.s.pShwPageCR3R0 = 0; 527 pVM->pgm.s.pShwRootR3 = 0; 528 528 # ifndef VBOX_WITH_2X_4GB_ADDR_SPACE 529 pVM->pgm.s.pShw PaePml4R0 = 0;529 pVM->pgm.s.pShwRootR0 = 0; 530 530 # endif 531 pVM->pgm.s.HCPhysShw PaePml4= 0;531 pVM->pgm.s.HCPhysShwCR3 = 0; 532 532 } 533 533 534 534 Assert(!(GCPhysCR3 >> (PAGE_SHIFT + 32))); 535 rc = pgmPoolAlloc(pVM, GCPhysCR3, PGMPOOLKIND_64BIT_PML4_FOR_64BIT_PML4, PGMPOOL_IDX_AMD64_CR3, GCPhysCR3 >> PAGE_SHIFT, &pVM->pgm.s.CTX_SUFF(pShw Amd64CR3));535 rc = pgmPoolAlloc(pVM, GCPhysCR3, PGMPOOLKIND_64BIT_PML4_FOR_64BIT_PML4, PGMPOOL_IDX_AMD64_CR3, GCPhysCR3 >> PAGE_SHIFT, &pVM->pgm.s.CTX_SUFF(pShwPageCR3)); 536 536 if (rc == VERR_PGM_POOL_FLUSHED) 537 537 { … … 542 542 AssertRCReturn(rc, rc); 543 543 # ifdef IN_RING0 544 pVM->pgm.s.pShw Amd64CR3R3 = MMHyperCCToR3(pVM, pVM->pgm.s.CTX_SUFF(pShwAmd64CR3));544 pVM->pgm.s.pShwPageCR3R3 = MMHyperCCToR3(pVM, pVM->pgm.s.CTX_SUFF(pShwPageCR3)); 545 545 # else 546 pVM->pgm.s.pShw Amd64CR3R0 = MMHyperCCToR0(pVM, pVM->pgm.s.CTX_SUFF(pShwAmd64CR3));546 pVM->pgm.s.pShwPageCR3R0 = MMHyperCCToR0(pVM, pVM->pgm.s.CTX_SUFF(pShwPageCR3)); 547 547 # endif 548 pVM->pgm.s.pShw PaePml4R3 = (R3PTRTYPE(PX86PML4))pVM->pgm.s.CTX_SUFF(pShwAmd64CR3)->pvPageR3;549 Assert(pVM->pgm.s.pShw PaePml4R3);548 pVM->pgm.s.pShwRootR3 = (R3PTRTYPE(void *))pVM->pgm.s.CTX_SUFF(pShwPageCR3)->pvPageR3; 549 Assert(pVM->pgm.s.pShwRootR3); 550 550 # ifndef VBOX_WITH_2X_4GB_ADDR_SPACE 551 pVM->pgm.s.pShw PaePml4R0 = (R0PTRTYPE(PX86PML4))PGMPOOL_PAGE_2_PTR(pPool->CTX_SUFF(pVM), pVM->pgm.s.CTX_SUFF(pShwAmd64CR3));551 pVM->pgm.s.pShwRootR0 = (R0PTRTYPE(void *))PGMPOOL_PAGE_2_PTR(pPool->CTX_SUFF(pVM), pVM->pgm.s.CTX_SUFF(pShwPageCR3)); 552 552 # endif 553 pVM->pgm.s.HCPhysShw PaePml4 = pVM->pgm.s.CTX_SUFF(pShwAmd64CR3)->Core.Key;553 pVM->pgm.s.HCPhysShwCR3 = pVM->pgm.s.CTX_SUFF(pShwPageCR3)->Core.Key; 554 554 rc = VINF_SUCCESS; /* clear it - pgmPoolAlloc returns hints. */ 555 555 } … … 611 611 if (!HWACCMIsNestedPagingActive(pVM)) 612 612 { 613 pVM->pgm.s.pShw PaePml4R3 = 0;613 pVM->pgm.s.pShwRootR3 = 0; 614 614 # ifndef VBOX_WITH_2X_4GB_ADDR_SPACE 615 pVM->pgm.s.pShw PaePml4R0 = 0;616 # endif 617 pVM->pgm.s.HCPhysShw PaePml4= 0;618 if (pVM->pgm.s.CTX_SUFF(pShw Amd64CR3))615 pVM->pgm.s.pShwRootR0 = 0; 616 # endif 617 pVM->pgm.s.HCPhysShwCR3 = 0; 618 if (pVM->pgm.s.CTX_SUFF(pShwPageCR3)) 619 619 { 620 620 PPGMPOOL pPool = pVM->pgm.s.CTX_SUFF(pPool); 621 pgmPoolFreeByPage(pPool, pVM->pgm.s.CTX_SUFF(pShw Amd64CR3), PGMPOOL_IDX_AMD64_CR3, pVM->pgm.s.CTX_SUFF(pShwAmd64CR3)->GCPhys >> PAGE_SHIFT);622 pVM->pgm.s.pShw Amd64CR3R3 = 0;623 pVM->pgm.s.pShw Amd64CR3R0 = 0;621 pgmPoolFreeByPage(pPool, pVM->pgm.s.CTX_SUFF(pShwPageCR3), PGMPOOL_IDX_AMD64_CR3, pVM->pgm.s.CTX_SUFF(pShwPageCR3)->GCPhys >> PAGE_SHIFT); 622 pVM->pgm.s.pShwPageCR3R3 = 0; 623 pVM->pgm.s.pShwPageCR3R0 = 0; 624 624 } 625 625 } -
trunk/src/VBox/VMM/testcase/tstVMStructGC.cpp
r16019 r16172 447 447 GEN_CHECK_OFF(PGM, pShwPaePdptRC); 448 448 GEN_CHECK_OFF(PGM, HCPhysShwPaePdpt); 449 GEN_CHECK_OFF(PGM, pShw PaePml4R3);449 GEN_CHECK_OFF(PGM, pShwRootR3); 450 450 #ifndef VBOX_WITH_2X_4GB_ADDR_SPACE 451 GEN_CHECK_OFF(PGM, pShwPaePml4R0); 452 #endif 453 GEN_CHECK_OFF(PGM, HCPhysShwPaePml4); 451 GEN_CHECK_OFF(PGM, pShwRootR0); 452 #endif 453 GEN_CHECK_OFF(PGM, HCPhysShwCR3); 454 GEN_CHECK_OFF(PGM, pShwPageCR3R3); 455 GEN_CHECK_OFF(PGM, pShwPageCR3R0); 456 GEN_CHECK_OFF(PGM, pShwPageCR3RC); 454 457 GEN_CHECK_OFF(PGM, pfnR3ShwRelocate); 455 458 GEN_CHECK_OFF(PGM, pfnR3ShwExit);
Note:
See TracChangeset
for help on using the changeset viewer.

