Changeset 14131 in vbox for trunk/src/VBox
- Timestamp:
- Nov 12, 2008 12:46:26 PM (16 years ago)
- Location:
- trunk/src/VBox/VMM
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/PGMMap.cpp
r14075 r14131 356 356 357 357 /* 358 * In PAE / PAE mode, make sure we don't cross page directories. 359 */ 360 if ( ( pVM->pgm.s.enmGuestMode == PGMMODE_PAE 361 || pVM->pgm.s.enmGuestMode == PGMMODE_PAE_NX) 362 && ( pVM->pgm.s.enmShadowMode == PGMMODE_PAE 363 || pVM->pgm.s.enmShadowMode == PGMMODE_PAE_NX)) 364 { 365 unsigned iPdptBase = GCPtrBase >> X86_PDPT_SHIFT; 366 unsigned iPdptLast = (GCPtrBase + cb - 1) >> X86_PDPT_SHIFT; 367 if (iPdptBase != iPdptLast) 368 { 369 LogRel(("PGMR3MappingsFix: Crosses PD boundrary; iPdptBase=%#x iPdptLast=%#x (GCPtrBase=%RGv cb=%#zx). The guest should retry.\n", 370 iPdptBase, iPdptLast, GCPtrBase, cb)); 371 return VERR_PGM_MAPPINGS_FIX_CONFLICT; 372 } 373 } 374 375 /* 358 376 * Loop the mappings and check that they all agree on their new locations. 359 377 */ … … 977 995 * Note that we do not support mappings at the very end of the 978 996 * address space since that will break our GCPtrEnd assumptions. 997 * Nor do we support mappings crossing page directories. 979 998 */ 980 999 const unsigned cPTs = pMapping->cb >> X86_PD_PAE_SHIFT; -
trunk/src/VBox/VMM/VMMAll/PGMAllBth.h
r14103 r14131 3280 3280 /* It's fixed, just skip the mapping. */ 3281 3281 const unsigned cPTs = pMapping->cb >> GST_PD_SHIFT; 3282 Assert(PGM_GST_TYPE == PGM_TYPE_32BIT || (iPD + cPTs - 1) / X86_PG_PAE_ENTRIES == iPD / X86_PG_PAE_ENTRIES); 3282 3283 iPD += cPTs - 1; 3283 3284 # if PGM_SHW_TYPE != PGM_GST_TYPE /* SHW==PAE && GST==32BIT */ … … 3285 3286 # else 3286 3287 pPDEDst += cPTs; 3287 /** @todo Assert on / deal with cross PD mappings in PAE/PAE mode! */3288 3288 # endif 3289 3289 pMapping = pMapping->CTX_SUFF(pNext); … … 3491 3491 3492 3492 /* advance. */ 3493 Assert(PGM_GST_TYPE == PGM_TYPE_32BIT || (iPD + cPTs - 1) / X86_PG_PAE_ENTRIES == iPD / X86_PG_PAE_ENTRIES); 3493 3494 iPD += cPTs - 1; 3494 3495 # if PGM_SHW_TYPE != PGM_GST_TYPE /* SHW==PAE && GST==32BIT */ … … 3496 3497 # else 3497 3498 pPDEDst += cPTs; 3498 /** @todo Assert on / deal with cross PD mappings in PAE/PAE mode! */3499 3499 # endif 3500 3500 # if PGM_GST_TYPE != PGM_SHW_TYPE
Note:
See TracChangeset
for help on using the changeset viewer.