Changeset 17462 in vbox
- Timestamp:
- Mar 6, 2009 1:00:54 PM (16 years ago)
- svn:sync-xref-src-repo-rev:
- 43886
- Location:
- trunk/src/VBox/VMM
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/PGMInternal.h
r17461 r17462 184 184 #define PGM_PTFLAGS_CSAM_VALIDATED RT_BIT_64(11) 185 185 #endif 186 187 /** Mark a dynamic map entry (PGMDynMapHCPage) as locked. */188 #define PGM_PTFLAGS_DYN_LOCKED RT_BIT(9)189 186 190 187 /** @} */ … … 2633 2630 * The cache size is covering half of the mapping area. */ 2634 2631 RTHCPHYS aHCPhysDynPageMapCache[MM_HYPER_DYNAMIC_SIZE >> (PAGE_SHIFT + 1)]; 2632 uint32_t aLockedDynPageMapCache[MM_HYPER_DYNAMIC_SIZE >> (PAGE_SHIFT + 1)]; 2635 2633 2636 2634 /** The address of the ring-0 mapping cache if we're making use of it. */ -
trunk/src/VBox/VMM/VMMAll/PGMAll.cpp
r17433 r17462 2274 2274 { 2275 2275 pVM->pgm.s.iDynPageMapLast = iPage = (iPage + 1) & ((MM_HYPER_DYNAMIC_SIZE >> PAGE_SHIFT) - 1); 2276 if (! (pVM->pgm.s.paDynPageMap32BitPTEsGC[iPage].u & PGM_PTFLAGS_DYN_LOCKED))2276 if (!pVM->pgm.s.aLockedDynPageMapCache[iPage]) 2277 2277 break; 2278 2278 iPage++; … … 2286 2286 pVM->pgm.s.paDynPageMap32BitPTEsGC[iPage].u = (uint32_t)HCPhys | X86_PTE_P | X86_PTE_A | X86_PTE_D; 2287 2287 pVM->pgm.s.paDynPageMapPaePTEsGC[iPage].u = HCPhys | X86_PTE_P | X86_PTE_A | X86_PTE_D; 2288 pVM->pgm.s.aLockedDynPageMapCache[iPage] = 0; 2288 2289 2289 2290 void *pv = pVM->pgm.s.pbDynPageMapBaseGC + (iPage << PAGE_SHIFT); … … 2308 2309 Assert(GCPage >= pVM->pgm.s.pbDynPageMapBaseGC && GCPage < (pVM->pgm.s.pbDynPageMapBaseGC + MM_HYPER_DYNAMIC_SIZE)); 2309 2310 iPage = ((uintptr_t)(GCPage - pVM->pgm.s.pbDynPageMapBaseGC)) >> PAGE_SHIFT; 2310 Assert(! (pVM->pgm.s.paDynPageMap32BitPTEsGC[iPage].u & PGM_PTFLAGS_DYN_LOCKED));2311 pVM->pgm.s.paDynPageMap32BitPTEsGC[iPage].u |= PGM_PTFLAGS_DYN_LOCKED;2311 Assert(!pVM->pgm.s.aLockedDynPageMapCache[iPage]); 2312 ASMAtomicIncU32(&pVM->pgm.s.aLockedDynPageMapCache[iPage]); 2312 2313 return VINF_SUCCESS; 2313 2314 } … … 2325 2326 unsigned iPage; 2326 2327 2328 AssertCompile(RT_ELEMENTS(pVM->pgm.s.aHCPhysDynPageMapCache) == RT_ELEMENTS(pVM->pgm.s.aLockedDynPageMapCache)); 2329 2327 2330 Assert(GCPage >= pVM->pgm.s.pbDynPageMapBaseGC && GCPage < (pVM->pgm.s.pbDynPageMapBaseGC + MM_HYPER_DYNAMIC_SIZE)); 2328 2331 iPage = ((uintptr_t)(GCPage - pVM->pgm.s.pbDynPageMapBaseGC)) >> PAGE_SHIFT; 2329 Assert(pVM->pgm.s. paDynPageMap32BitPTEsGC[iPage].u & PGM_PTFLAGS_DYN_LOCKED);2330 pVM->pgm.s.paDynPageMap32BitPTEsGC[iPage].u &= ~PGM_PTFLAGS_DYN_LOCKED;2332 Assert(pVM->pgm.s.aLockedDynPageMapCache[iPage]); 2333 ASMAtomicDecU32(&pVM->pgm.s.aLockedDynPageMapCache[iPage]); 2331 2334 return VINF_SUCCESS; 2332 2335 } … … 2341 2344 VMMDECL(void) PGMDynCheckLocks(PVM pVM) 2342 2345 { 2343 for (unsigned i=0;i< (MM_HYPER_DYNAMIC_SIZE >> PAGE_SHIFT);i++)2344 Assert(! (pVM->pgm.s.paDynPageMap32BitPTEsGC[i].u & PGM_PTFLAGS_DYN_LOCKED));2346 for (unsigned i=0;i<RT_ELEMENTS(pVM->pgm.s.aLockedDynPageMapCache);i++) 2347 Assert(!pVM->pgm.s.aLockedDynPageMapCache[i]); 2345 2348 } 2346 2349 # endif /* VBOX_STRICT */
Note:
See TracChangeset
for help on using the changeset viewer.