Changeset 31786 in vbox
- Timestamp:
- Aug 19, 2010 12:18:48 PM (14 years ago)
- Location:
- trunk
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/include/VBox/pgm.h
r31636 r31786 423 423 VMMR0DECL(int) PGMR0SharedModuleCheck(PVM pVM, PGVM pGVM, VMCPUID idCpu, PGMMSHAREDMODULE pModule, uint32_t cRegions, PGMMSHAREDREGIONDESC pRegions); 424 424 VMMR0DECL(int) PGMR0Trap0eHandlerNestedPaging(PVM pVM, PVMCPU pVCpu, PGMMODE enmShwPagingMode, RTGCUINT uErr, PCPUMCTXCORE pRegFrame, RTGCPHYS pvFault); 425 VMMR0DECL(VBOXSTRICTRC) PGMR0Trap0eHandlerNPMisconfig(PVM pVM, PVMCPU pVCpu, PGMMODE enmShwPagingMode, PCPUMCTXCORE pRegFrame, RTGCPHYS GCPhysFault );425 VMMR0DECL(VBOXSTRICTRC) PGMR0Trap0eHandlerNPMisconfig(PVM pVM, PVMCPU pVCpu, PGMMODE enmShwPagingMode, PCPUMCTXCORE pRegFrame, RTGCPHYS GCPhysFault, uint32_t uErr); 426 426 # ifdef VBOX_WITH_2X_4GB_ADDR_SPACE 427 427 VMMR0DECL(int) PGMR0DynMapInit(void); -
trunk/src/VBox/VMM/VMMR0/HWSVMR0.cpp
r31569 r31786 1886 1886 if ((errCode & (X86_TRAP_PF_RSVD | X86_TRAP_PF_P)) == (X86_TRAP_PF_RSVD | X86_TRAP_PF_P)) 1887 1887 { 1888 rc = PGMR0Trap0eHandlerNPMisconfig(pVM, pVCpu, enmShwPagingMode, CPUMCTX2CORE(pCtx), GCPhysFault );1888 rc = PGMR0Trap0eHandlerNPMisconfig(pVM, pVCpu, enmShwPagingMode, CPUMCTX2CORE(pCtx), GCPhysFault, errCode); 1889 1889 if (rc == VINF_SUCCESS) 1890 1890 { -
trunk/src/VBox/VMM/VMMR0/HWVMXR0.cpp
r31646 r31786 3458 3458 Log(("VMX_EXIT_EPT_MISCONFIG for %RGp\n", GCPhys)); 3459 3459 3460 rc = PGMR0Trap0eHandlerNPMisconfig(pVM, pVCpu, PGMMODE_EPT, CPUMCTX2CORE(pCtx), GCPhys );3460 rc = PGMR0Trap0eHandlerNPMisconfig(pVM, pVCpu, PGMMODE_EPT, CPUMCTX2CORE(pCtx), GCPhys, UINT32_MAX); 3461 3461 if (rc == VINF_SUCCESS) 3462 3462 { -
trunk/src/VBox/VMM/VMMR0/PGMR0.cpp
r31593 r31786 323 323 * @param pRegFrame Trap register frame. 324 324 * @param GCPhysFault The fault address. 325 * @param uErr The error code, UINT32_MAX if not available 326 * (VT-x). 325 327 */ 326 328 VMMR0DECL(VBOXSTRICTRC) PGMR0Trap0eHandlerNPMisconfig(PVM pVM, PVMCPU pVCpu, PGMMODE enmShwPagingMode, 327 PCPUMCTXCORE pRegFrame, RTGCPHYS GCPhysFault )329 PCPUMCTXCORE pRegFrame, RTGCPHYS GCPhysFault, uint32_t uErr) 328 330 { 329 331 #ifdef PGM_WITH_MMIO_OPTIMIZATIONS … … 336 338 pgmLock(pVM); 337 339 PPGMPHYSHANDLER pHandler = pgmHandlerPhysicalLookup(pVM, GCPhysFault); 338 if (RT_LIKELY(pHandler ))340 if (RT_LIKELY(pHandler && pHandler->enmType != PGMPHYSHANDLERTYPE_PHYSICAL_WRITE)) 339 341 { 340 342 if (pHandler->CTX_SUFF(pfnHandler)) … … 345 347 pgmUnlock(pVM); 346 348 347 rc = pfnHandler(pVM, RTGCPTR_MAX /*uErr*/, pRegFrame, GCPhysFault, GCPhysFault, pvUser); 349 Log6(("PGMR0Trap0eHandlerNPMisconfig: calling %p(,%#x,,%RGp,%p)\n", pfnHandler, uErr, GCPhysFault, pvUser)); 350 rc = pfnHandler(pVM, uErr == UINT32_MAX ? RTGCPTR_MAX : uErr, pRegFrame, GCPhysFault, GCPhysFault, pvUser); 348 351 349 352 #ifdef VBOX_WITH_STATISTICS … … 358 361 { 359 362 pgmUnlock(pVM); 363 Log(("PGMR0Trap0eHandlerNPMisconfig: %RGp (uErr=%#x) -> R3\n", GCPhysFault, uErr)); 360 364 rc = VINF_EM_RAW_EMULATE_INSTR; 361 365 } … … 366 370 * Must be out of sync, so do a SyncPage and restart the instruction. 367 371 */ 372 Log(("PGMR0Trap0eHandlerNPMisconfig: Out of sync page at %RGp (uErr=%#x)\n", GCPhysFault, uErr)); 368 373 STAM_COUNTER_INC(&pVCpu->pgm.s.CTX_SUFF(pStats)->StatR0NpMiscfgSyncPage); 369 374 rc = pgmShwSyncNestedPageLocked(pVCpu, GCPhysFault, 1 /*cPages*/, enmShwPagingMode);
Note:
See TracChangeset
for help on using the changeset viewer.