- Timestamp:
- Feb 26, 2009 5:23:42 PM (16 years ago)
- svn:sync-xref-src-repo-rev:
- 43457
- Location:
- trunk/src/VBox/VMM/VMMAll
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/PGMAll.cpp
r17166 r17178 876 876 int rc; 877 877 878 # if defined(IN_RC) && defined(VBOX_WITH_PGMPOOL_PAGING_ONLY)879 /* Make sure the dynamic pPdeDst mapping will not be reused during this function. */880 PGMDynLockHCPage(pVM, (uint8_t *)pPdpe);881 # endif882 883 878 /* Allocate page directory if not present. */ 884 879 if ( !pPdpe->n.u1Present … … 889 884 RTGCPTR64 GCPdPt; 890 885 PGMPOOLKIND enmKind; 886 887 # if defined(IN_RC) && defined(VBOX_WITH_PGMPOOL_PAGING_ONLY) 888 /* Make sure the dynamic pPdeDst mapping will not be reused during this function. */ 889 PGMDynLockHCPage(pVM, (uint8_t *)pPdpe); 890 # endif 891 891 892 892 if (fNestedPaging || !fPaging) … … 925 925 } 926 926 AssertRCReturn(rc, rc); 927 928 /* The PD was cached or created; hook it up now. */ 929 pPdpe->u |= pShwPage->Core.Key 930 | (pGstPdpe->u & ~(X86_PDPE_PG_MASK | X86_PDPE_AVL_MASK | X86_PDPE_PCD | X86_PDPE_PWT)); 931 932 # if defined(IN_RC) && defined(VBOX_WITH_PGMPOOL_PAGING_ONLY) 933 /* In 32 bits PAE mode we *must* invalidate the TLB when changing a PDPT entry; the CPU fetches them only during cr3 load, so any 934 * non-present PDPT will continue to cause page faults. 935 */ 936 ASMReloadCR3(); 937 PGMDynUnlockHCPage(pVM, (uint8_t *)pPdpe); 938 # endif 927 939 } 928 940 else … … 930 942 pShwPage = pgmPoolGetPage(pPool, pPdpe->u & X86_PDPE_PG_MASK); 931 943 AssertReturn(pShwPage, VERR_INTERNAL_ERROR); 932 } 933 /* The PD was cached or created; hook it up now. */ 934 pPdpe->u |= pShwPage->Core.Key 935 | (pGstPdpe->u & ~(X86_PDPE_PG_MASK | X86_PDPE_AVL_MASK | X86_PDPE_PCD | X86_PDPE_PWT)); 936 937 # if defined(IN_RC) && defined(VBOX_WITH_PGMPOOL_PAGING_ONLY) 938 PGMDynUnlockHCPage(pVM, (uint8_t *)pPdpe); 939 # endif 944 945 Assert((pPdpe->u & X86_PDPE_PG_MASK) == pShwPage->Core.Key)); 946 } 940 947 *ppPD = (PX86PDPAE)PGMPOOL_PAGE_2_PTR(pVM, pShwPage); 941 948 return VINF_SUCCESS; -
trunk/src/VBox/VMM/VMMAll/PGMAllPool.cpp
r17177 r17178 3203 3203 case PGMPOOLKIND_PAE_PD3_FOR_32BIT_PD: 3204 3204 case PGMPOOLKIND_PAE_PD_FOR_PAE_PD: 3205 #if defined(IN_RC) && defined(VBOX_WITH_PGMPOOL_PAGING_ONLY) 3206 /* In 32 bits PAE mode we *must* invalidate the TLB when changing a PDPT entry; the CPU fetches them only during cr3 load, so any 3207 * non-present PDPT will continue to cause page faults. 3208 */ 3209 ASMReloadCR3(); 3210 #endif 3211 /* no break */ 3205 3212 case PGMPOOLKIND_PAE_PD_PHYS: 3206 3213 case PGMPOOLKIND_PAE_PDPT_PHYS: … … 3210 3217 case PGMPOOLKIND_64BIT_PDPT_FOR_PHYS: 3211 3218 case PGMPOOLKIND_64BIT_PD_FOR_PHYS: 3212 # 3219 #if !defined(VBOX_WITH_2X_4GB_ADDR_SPACE_IN_R0) && !defined(VBOX_WITH_PGMPOOL_PAGING_ONLY) 3213 3220 case PGMPOOLKIND_ROOT_PAE_PD: 3214 3221 #endif
Note:
See TracChangeset
for help on using the changeset viewer.