- Timestamp:
- Sep 23, 2009 10:00:46 AM (15 years ago)
- Location:
- trunk/src/VBox/VMM/VMMAll
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/PGMAllBth.h
r23116 r23250 2250 2250 PGM_INVL_BIG_PG(pVCpu, GCPtrPage); 2251 2251 STAM_PROFILE_STOP(&pVCpu->pgm.s.CTX_MID_Z(Stat,DirtyBitTracking), a); 2252 return VINF_PGM_HANDLED_DIRTY_BIT_FAULT; 2252 return VINF_PGM_HANDLED_DIRTY_BIT_FAULT; /* restarts the instruction. */ 2253 2253 } 2254 2254 # ifdef IN_RING0 … … 2272 2272 2273 2273 STAM_PROFILE_STOP(&pVCpu->pgm.s.CTX_MID_Z(Stat,DirtyBitTracking), a); 2274 return VINF_PGM_HANDLED_DIRTY_BIT_FAULT; 2274 return VINF_PGM_HANDLED_DIRTY_BIT_FAULT; /* restarts the instruction. */ 2275 2275 } 2276 2276 } … … 2369 2369 if (pPteDst->u & PGM_PTFLAGS_TRACK_DIRTY) 2370 2370 { 2371 PPGMPAGE pPage = pgmPhysGetPage(&pVM->pgm.s, pPteSrc->u & GST_PTE_PG_MASK); 2372 2371 2373 LogFlow(("DIRTY page trap addr=%RGv\n", GCPtrPage)); 2372 # ifdef VBOX_STRICT 2373 PPGMPAGE pPage = pgmPhysGetPage(&pVM->pgm.s, pPteSrc->u & GST_PTE_PG_MASK); 2374 if (pPage) 2375 AssertMsg(!PGM_PAGE_HAS_ACTIVE_HANDLERS(pPage), 2376 ("Unexpected dirty bit tracking on monitored page %RGv (phys %RGp)!!!!!!\n", GCPtrPage, pPteSrc->u & X86_PTE_PAE_PG_MASK)); 2377 # endif 2374 2378 2375 STAM_COUNTER_INC(&pVCpu->pgm.s.CTX_MID_Z(Stat,DirtyPageTrap)); 2379 2376 … … 2383 2380 * fault again and take this path to only invalidate the entry. 2384 2381 */ 2385 pPteDst->n.u1Write = 1; 2382 if ( pPage 2383 && PGM_PAGE_HAS_ACTIVE_HANDLERS(pPage)) 2384 { 2385 /* Assuming write handlers here as the PTE is present (otherwise it wouldn't be). */ 2386 pPteDst->n.u1Write = 0; 2387 } 2388 else 2389 pPteDst->n.u1Write = 1; 2390 2386 2391 pPteDst->n.u1Dirty = 1; 2387 2392 pPteDst->n.u1Accessed = 1; … … 2390 2395 2391 2396 STAM_PROFILE_STOP(&pVCpu->pgm.s.CTX_MID_Z(Stat,DirtyBitTracking), a); 2392 return VINF_PGM_HANDLED_DIRTY_BIT_FAULT; 2397 return VINF_PGM_HANDLED_DIRTY_BIT_FAULT; /* restarts the instruction. */ 2393 2398 } 2394 2399 # ifdef IN_RING0 … … 2404 2409 2405 2410 STAM_PROFILE_STOP(&pVCpu->pgm.s.CTX_MID_Z(Stat,DirtyBitTracking), a); 2406 return VINF_PGM_HANDLED_DIRTY_BIT_FAULT; 2411 return VINF_PGM_HANDLED_DIRTY_BIT_FAULT; /* restarts the instruction. */ 2407 2412 } 2408 2413 # endif -
trunk/src/VBox/VMM/VMMAll/PGMAllPool.cpp
r23199 r23250 3197 3197 Log4(("pgmPoolTrackFlushGCPhysPTs: i=%d pte=%RX32 cRefs=%#x\n", i, pPT->a[i], cRefs)); 3198 3198 pPT->a[i].u = (pPT->a[i].u & u32AndMask) | u32OrMask; 3199 if (pPT->a[i].u & PGM_PTFLAGS_TRACK_DIRTY) 3200 pPT->a[i].n.u1Write = 0; /* need to disallow writes when dirty bit tracking is still active. */ 3201 3199 3202 cRefs--; 3200 3203 if (!cRefs) … … 3257 3260 Log4(("pgmPoolTrackFlushGCPhysPTs: i=%d pte=%RX64 cRefs=%#x\n", i, pPT->a[i], cRefs)); 3258 3261 pPT->a[i].u = (pPT->a[i].u & u64AndMask) | u64OrMask; 3262 if (pPT->a[i].u & PGM_PTFLAGS_TRACK_DIRTY) 3263 pPT->a[i].n.u1Write = 0; /* need to disallow writes when dirty bit tracking is still active. */ 3264 3259 3265 cRefs--; 3260 3266 if (!cRefs)
Note:
See TracChangeset
for help on using the changeset viewer.