Changeset 31784 in vbox for trunk/src/VBox/VMM/VMMAll
- Timestamp:
- Aug 19, 2010 11:42:18 AM (15 years ago)
- svn:sync-xref-src-repo-rev:
- 64972
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/PGMAllBth.h
r31780 r31784 176 176 * ASSUMES that there is only one handler per page or that they have similar write properties. 177 177 */ 178 if ( pCur->enmType == PGMPHYSHANDLERTYPE_PHYSICAL_WRITE179 && !(uErr & X86_TRAP_PF_P))178 if ( !(uErr & X86_TRAP_PF_P) 179 && pCur->enmType == PGMPHYSHANDLERTYPE_PHYSICAL_WRITE) 180 180 { 181 181 # if PGM_WITH_PAGING(PGM_GST_TYPE, PGM_SHW_TYPE) … … 195 195 } 196 196 # endif 197 # ifdef PGM_WITH_MMIO_OPTIMIZATIONS 198 /* 199 * If the access was not thru a #PF(RSVD|...) resync the page. 200 */ 201 if ( !(uErr & X86_TRAP_PF_RSVD) 202 && pCur->enmType != PGMPHYSHANDLERTYPE_PHYSICAL_WRITE 203 # if PGM_WITH_PAGING(PGM_GST_TYPE, PGM_SHW_TYPE) 204 && pGstWalk->Core.fEffectiveRW 205 && !pGstWalk->Core.fEffectiveUS /** @todo Remove pGstWalk->Core.fEffectiveUS and X86_PTE_US further down in the sync code. */ 206 # endif 207 ) 208 { 209 # if PGM_WITH_PAGING(PGM_GST_TYPE, PGM_SHW_TYPE) 210 rc = PGM_BTH_NAME(SyncPage)(pVCpu, pGstWalk->Pde, pvFault, PGM_SYNC_NR_PAGES, uErr); 211 # else 212 rc = PGM_BTH_NAME(SyncPage)(pVCpu, PdeSrcDummy, pvFault, PGM_SYNC_NR_PAGES, uErr); 213 # endif 214 if ( RT_FAILURE(rc) 215 || rc == VINF_PGM_SYNCPAGE_MODIFIED_PDE) 216 { 217 AssertRC(rc); 218 STAM_COUNTER_INC(&pVCpu->pgm.s.CTX_SUFF(pStats)->StatRZTrap0eHandlersOutOfSync); 219 STAM_STATS({ pVCpu->pgm.s.CTX_SUFF(pStatTrap0eAttribution) = &pVCpu->pgm.s.CTX_SUFF(pStats)->StatRZTrap0eTime2OutOfSyncHndPhys; }); 220 return rc; 221 } 222 } 223 # endif 197 224 198 225 AssertMsg( pCur->enmType != PGMPHYSHANDLERTYPE_PHYSICAL_WRITE … … 200 227 ("Unexpected trap for physical handler: %08X (phys=%08x) pPage=%R[pgmpage] uErr=%X, enum=%d\n", 201 228 pvFault, GCPhysFault, pPage, uErr, pCur->enmType)); 229 if (pCur->enmType == PGMPHYSHANDLERTYPE_PHYSICAL_WRITE) 230 STAM_COUNTER_INC(&pVCpu->pgm.s.CTX_SUFF(pStats)->StatRZTrap0eHandlersPhysWrite); 231 else 232 { 233 STAM_COUNTER_INC(&pVCpu->pgm.s.CTX_SUFF(pStats)->StatRZTrap0eHandlersPhysAll); 234 if (uErr & X86_TRAP_PF_RSVD) STAM_COUNTER_INC(&pVCpu->pgm.s.CTX_SUFF(pStats)->StatRZTrap0eHandlersPhysAllOpt); 235 } 202 236 203 237 if (pCur->CTX_SUFF(pfnHandler)) … … 231 265 rc = VINF_EM_RAW_EMULATE_INSTR; 232 266 233 STAM_COUNTER_INC(&pVCpu->pgm.s.CTX_SUFF(pStats)->StatRZTrap0eHandlersPhysical);234 if (uErr & X86_TRAP_PF_RSVD) STAM_COUNTER_INC(&pVCpu->pgm.s.CTX_SUFF(pStats)->StatRZTrap0eHandlersPhysicalOpt);235 267 STAM_STATS({ pVCpu->pgm.s.CTX_SUFF(pStatTrap0eAttribution) = &pVCpu->pgm.s.CTX_SUFF(pStats)->StatRZTrap0eTime2HndPhys; }); 236 268 return rc; … … 1471 1503 else if ( PGM_PAGE_HAS_ACTIVE_ALL_HANDLERS(pPage) 1472 1504 && ( BTH_IS_NP_ACTIVE(pVM) 1473 || (fPteSrc & (X86_PTE_RW | X86_PTE_US)) == X86_PTE_RW) /** @todo remove X86_PTE_US*/1505 || (fPteSrc & (X86_PTE_RW | X86_PTE_US)) == X86_PTE_RW) /** @todo Remove X86_PTE_US here and pGstWalk->Core.fEffectiveUS before the sync page test. */ 1474 1506 # if PGM_SHW_TYPE == PGM_TYPE_AMD64 1475 1507 && pVM->pgm.s.fLessThan52PhysicalAddressBits
Note:
See TracChangeset
for help on using the changeset viewer.