Changeset 14010 in vbox for trunk/src/VBox/VMM
- Timestamp:
- Nov 10, 2008 1:38:57 PM (16 years ago)
- svn:sync-xref-src-repo-rev:
- 39063
- Location:
- trunk/src/VBox/VMM
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/PGMInternal.h
r14002 r14010 2095 2095 /** The Physical Address (HC) of the Page Map Level 4 table. */ 2096 2096 RTHCPHYS HCPhysPaePML4; 2097 #if 02098 2097 /** The pgm pool page descriptor for the current active CR3 - R3 Ptr. */ 2099 2098 R3PTRTYPE(PPGMPOOLPAGE) pShwAmd64CR3R3; 2100 2099 /** The pgm pool page descriptor for the current active CR3 - R0 Ptr. */ 2101 2100 R0PTRTYPE(PPGMPOOLPAGE) pShwAmd64CR3R0; 2102 #else2103 /** The pgm pool page descriptor for the current active CR3. */2104 #if 0///@todo def VBOX_WITH_2X_4GB_ADDR_SPACE2105 R3PTRTYPE(PPGMPOOLPAGE) pHCShwAmd64CR3;2106 #else2107 R3R0PTRTYPE(PPGMPOOLPAGE) pHCShwAmd64CR3;2108 #endif2109 #endif2110 2101 /** @}*/ 2111 2102 -
trunk/src/VBox/VMM/VMMAll/PGMAll.cpp
r13993 r14010 931 931 * trustworthy? (Remove pgmGstGetLongModePML4E if pGstPml4e and pGstPdpe 932 932 * are fine.) */ 933 Assert(pVM->pgm.s. pHCShwAmd64CR3);933 Assert(pVM->pgm.s.CTX_SUFF(pShwAmd64CR3)); 934 934 Pml4eGst.u = 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. pHCShwAmd64CR3->idx, iPml4, &pShwPage);937 PGMPOOLKIND_64BIT_PDPT_FOR_64BIT_PDPT, pVM->pgm.s.CTX_SUFF(pShwAmd64CR3)->idx, iPml4, &pShwPage); 938 938 } 939 939 else -
trunk/src/VBox/VMM/VMMAll/PGMAllBth.h
r13991 r14010 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. pHCShwAmd64CR3->idx, iPml4);1023 pgmPoolFreeByPage(pPool, pShwPdpt, pVM->pgm.s.CTX_SUFF(pShwAmd64CR3)->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. pHCShwAmd64CR3->idx, iPml4);1037 pgmPoolFreeByPage(pPool, pShwPdpt, pVM->pgm.s.CTX_SUFF(pShwAmd64CR3)->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. pHCShwAmd64CR3->idx, iPml4);1049 pgmPoolFreeByPage(pPool, pShwPdpt, pVM->pgm.s.CTX_SUFF(pShwAmd64CR3)->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
r13991 r14010 514 514 { 515 515 PPGMPOOL pPool = pVM->pgm.s.CTX_SUFF(pPool); 516 if (pVM->pgm.s. pHCShwAmd64CR3)516 if (pVM->pgm.s.CTX_SUFF(pShwAmd64CR3)) 517 517 { 518 518 /* It might have been freed already by a pool flush (see e.g. PGMR3MappingsUnfix). */ 519 if (pVM->pgm.s. pHCShwAmd64CR3->enmKind != PGMPOOLKIND_FREE)520 pgmPoolFreeByPage(pPool, pVM->pgm.s. pHCShwAmd64CR3, PGMPOOL_IDX_AMD64_CR3, pVM->pgm.s.pHCShwAmd64CR3->GCPhys >> PAGE_SHIFT);521 pVM->pgm.s. pHCShwAmd64CR3= 0;522 pVM->pgm.s.pShwPaePml4R3 = 0;519 if (pVM->pgm.s.CTX_SUFF(pShwAmd64CR3)->enmKind != PGMPOOLKIND_FREE) 520 pgmPoolFreeByPage(pPool, pVM->pgm.s.CTX_SUFF(pShwAmd64CR3), PGMPOOL_IDX_AMD64_CR3, pVM->pgm.s.CTX_SUFF(pShwAmd64CR3)->GCPhys >> PAGE_SHIFT); 521 pVM->pgm.s.CTX_SUFF(pShwAmd64CR3) = 0; 522 pVM->pgm.s.pShwPaePml4R3 = 0; 523 523 # ifndef VBOX_WITH_2X_4GB_ADDR_SPACE 524 pVM->pgm.s.pShwPaePml4R0 = 0;524 pVM->pgm.s.pShwPaePml4R0 = 0; 525 525 # endif 526 pVM->pgm.s.HCPhysPaePML4 = 0;526 pVM->pgm.s.HCPhysPaePML4 = 0; 527 527 } 528 528 529 529 Assert(!(GCPhysCR3 >> (PAGE_SHIFT + 32))); 530 530 l_try_again: 531 rc = pgmPoolAlloc(pVM, GCPhysCR3, PGMPOOLKIND_64BIT_PML4_FOR_64BIT_PML4, PGMPOOL_IDX_AMD64_CR3, GCPhysCR3 >> PAGE_SHIFT, &pVM->pgm.s. pHCShwAmd64CR3);531 rc = pgmPoolAlloc(pVM, GCPhysCR3, PGMPOOLKIND_64BIT_PML4_FOR_64BIT_PML4, PGMPOOL_IDX_AMD64_CR3, GCPhysCR3 >> PAGE_SHIFT, &pVM->pgm.s.CTX_SUFF(pShwAmd64CR3)); 532 532 if (rc == VERR_PGM_POOL_FLUSHED) 533 533 { … … 538 538 goto l_try_again; 539 539 } 540 pVM->pgm.s.pShwPaePml4R3 = (R3PTRTYPE(PX86PML4))PGMPOOL_PAGE_2_PTR(pPool->CTX_SUFF(pVM), pVM->pgm.s.pHCShwAmd64CR3); 540 # ifdef IN_RING0 541 pVM->pgm.s.pShwAmd64CR3R3 = MMHyperCCToR3(pVM, pVM->pgm.s.CTX_SUFF(pShwAmd64CR3)); 542 # else 543 pVM->pgm.s.pShwAmd64CR3R0 = MMHyperCCToR0(pVM, pVM->pgm.s.CTX_SUFF(pShwAmd64CR3)); 544 # endif 545 pVM->pgm.s.pShwPaePml4R3 = (R3PTRTYPE(PX86PML4))PGMPOOL_PAGE_2_PTR(pPool->CTX_SUFF(pVM), pVM->pgm.s.CTX_SUFF(pShwAmd64CR3)); 541 546 # ifndef VBOX_WITH_2X_4GB_ADDR_SPACE 542 pVM->pgm.s.pShwPaePml4R0 = (R0PTRTYPE(PX86PML4))PGMPOOL_PAGE_2_PTR(pPool->CTX_SUFF(pVM), pVM->pgm.s. pHCShwAmd64CR3);547 pVM->pgm.s.pShwPaePml4R0 = (R0PTRTYPE(PX86PML4))PGMPOOL_PAGE_2_PTR(pPool->CTX_SUFF(pVM), pVM->pgm.s.CTX_SUFF(pShwAmd64CR3)); 543 548 # endif 544 pVM->pgm.s.HCPhysPaePML4 = pVM->pgm.s. pHCShwAmd64CR3->Core.Key;549 pVM->pgm.s.HCPhysPaePML4 = pVM->pgm.s.CTX_SUFF(pShwAmd64CR3)->Core.Key; 545 550 } 546 551 # endif … … 606 611 # endif 607 612 pVM->pgm.s.HCPhysPaePML4 = 0; 608 if (pVM->pgm.s. pHCShwAmd64CR3)613 if (pVM->pgm.s.CTX_SUFF(pShwAmd64CR3)) 609 614 { 610 615 PPGMPOOL pPool = pVM->pgm.s.CTX_SUFF(pPool); 611 pgmPoolFreeByPage(pPool, pVM->pgm.s.pHCShwAmd64CR3, PGMPOOL_IDX_AMD64_CR3, pVM->pgm.s.pHCShwAmd64CR3->GCPhys >> PAGE_SHIFT); 612 pVM->pgm.s.pHCShwAmd64CR3 = 0; 616 pgmPoolFreeByPage(pPool, pVM->pgm.s.CTX_SUFF(pShwAmd64CR3), PGMPOOL_IDX_AMD64_CR3, pVM->pgm.s.CTX_SUFF(pShwAmd64CR3)->GCPhys >> PAGE_SHIFT); 617 pVM->pgm.s.pShwAmd64CR3R3 = 0; 618 pVM->pgm.s.pShwAmd64CR3R0 = 0; 613 619 } 614 620 }
Note:
See TracChangeset
for help on using the changeset viewer.