Changeset 91250 in vbox
- Timestamp:
- Sep 15, 2021 12:43:24 PM (3 years ago)
- Location:
- trunk
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/include/VBox/vmm/gvm.h
r90970 r91250 123 123 } vmmr0; 124 124 125 union 126 { 127 #if defined(VMM_INCLUDED_SRC_include_PGMInternal_h) && defined(IN_RING0) 128 struct PGMR0PERVCPU s; 129 #endif 130 uint8_t padding[64]; 131 } pgmr0; 132 125 133 /** Padding the structure size to page boundrary. */ 126 134 #ifdef VBOX_WITH_NEM_R0 127 uint8_t abPadding3[4096 - 64*2 - 64 - 1024 - 64 - 512 ];135 uint8_t abPadding3[4096 - 64*2 - 64 - 1024 - 64 - 512 - 64]; 128 136 #else 129 uint8_t abPadding3[4096 - 64*2 - 64 - 1024 - 512 ];137 uint8_t abPadding3[4096 - 64*2 - 64 - 1024 - 512 - 64]; 130 138 #endif 131 139 } GVMCPU; -
trunk/include/VBox/vmm/gvm.mac
r90970 r91250 52 52 alignb 64 53 53 .vmmr0 resb 512 54 alignb 64 55 .pgmr0 resb 64 54 56 alignb 4096 55 57 endstruc -
trunk/src/VBox/VMM/VMMAll/PGMAll.cpp
r91247 r91250 893 893 Log(("PGMTrap0eHandler: uErr=%RGx pvFault=%RGv eip=%04x:%RGv cr3=%RGp\n", uErr, pvFault, pRegFrame->cs.Sel, (RTGCPTR)pRegFrame->rip, (RTGCPHYS)CPUMGetGuestCR3(pVCpu))); 894 894 STAM_PROFILE_START(&pVCpu->pgm.s.Stats.StatRZTrap0e, a); 895 STAM_STATS({ pVCpu->pgm .s.CTX_SUFF(pStatTrap0eAttribution)= NULL; } );895 STAM_STATS({ pVCpu->pgmr0.s.pStatTrap0eAttributionR0 = NULL; } ); 896 896 897 897 … … 972 972 973 973 STAM_STATS({ if (rc == VINF_EM_RAW_GUEST_TRAP) STAM_COUNTER_INC(&pVCpu->pgm.s.Stats.StatRZTrap0eGuestPF); }); 974 STAM_STATS({ if (!pVCpu->pgm .s.CTX_SUFF(pStatTrap0eAttribution))975 pVCpu->pgm .s.CTX_SUFF(pStatTrap0eAttribution)= &pVCpu->pgm.s.Stats.StatRZTrap0eTime2Misc; });976 STAM_PROFILE_STOP_EX(&pVCpu->pgm.s.Stats.StatRZTrap0e, pVCpu->pgm .s.CTX_SUFF(pStatTrap0eAttribution), a);974 STAM_STATS({ if (!pVCpu->pgmr0.s.pStatTrap0eAttributionR0) 975 pVCpu->pgmr0.s.pStatTrap0eAttributionR0 = &pVCpu->pgm.s.Stats.StatRZTrap0eTime2Misc; }); 976 STAM_PROFILE_STOP_EX(&pVCpu->pgm.s.Stats.StatRZTrap0e, pVCpu->pgmr0.s.pStatTrap0eAttributionR0, a); 977 977 return rc; 978 978 } -
trunk/src/VBox/VMM/VMMAll/PGMAllBth.h
r91247 r91250 198 198 /* Force a CR3 sync to check for conflicts and emulate the instruction. */ 199 199 VMCPU_FF_SET(pVCpu, VMCPU_FF_PGM_SYNC_CR3); 200 STAM_STATS({ pVCpu->pgm .s.CTX_SUFF(pStatTrap0eAttribution)= &pVCpu->pgm.s.Stats.StatRZTrap0eTime2GuestTrap; });200 STAM_STATS({ pVCpu->pgmr0.s.pStatTrap0eAttributionR0 = &pVCpu->pgm.s.Stats.StatRZTrap0eTime2GuestTrap; }); 201 201 return VINF_EM_RAW_EMULATE_INSTR; 202 202 } … … 220 220 221 221 LogFlow(("Guest trap; cr2=%RGv uErr=%RGv lvl=%d\n", pGstWalk->Core.GCPtr, uErr, pGstWalk->Core.uLevel)); 222 STAM_STATS({ pVCpu->pgm .s.CTX_SUFF(pStatTrap0eAttribution)= &pVCpu->pgm.s.Stats.StatRZTrap0eTime2GuestTrap; });222 STAM_STATS({ pVCpu->pgmr0.s.pStatTrap0eAttributionR0 = &pVCpu->pgm.s.Stats.StatRZTrap0eTime2GuestTrap; }); 223 223 return VINF_EM_RAW_GUEST_TRAP; 224 224 } … … 293 293 AssertMsgRC(rcStrict, ("%Rrc\n", VBOXSTRICTRC_VAL(rcStrict))); 294 294 STAM_COUNTER_INC(&pVCpu->pgm.s.Stats.StatRZTrap0eHandlersOutOfSync); 295 STAM_STATS({ pVCpu->pgm .s.CTX_SUFF(pStatTrap0eAttribution)= &pVCpu->pgm.s.Stats.StatRZTrap0eTime2OutOfSyncHndPhys; });295 STAM_STATS({ pVCpu->pgmr0.s.pStatTrap0eAttributionR0 = &pVCpu->pgm.s.Stats.StatRZTrap0eTime2OutOfSyncHndPhys; }); 296 296 return rcStrict; 297 297 } … … 320 320 AssertMsgRC(rcStrict, ("%Rrc\n", VBOXSTRICTRC_VAL(rcStrict))); 321 321 STAM_COUNTER_INC(&pVCpu->pgm.s.Stats.StatRZTrap0eHandlersOutOfSync); 322 STAM_STATS({ pVCpu->pgm .s.CTX_SUFF(pStatTrap0eAttribution)= &pVCpu->pgm.s.Stats.StatRZTrap0eTime2OutOfSyncHndPhys; });322 STAM_STATS({ pVCpu->pgmr0.s.pStatTrap0eAttributionR0 = &pVCpu->pgm.s.Stats.StatRZTrap0eTime2OutOfSyncHndPhys; }); 323 323 return rcStrict; 324 324 } … … 363 363 rcStrict = VINF_EM_RAW_EMULATE_INSTR; 364 364 365 STAM_STATS({ pVCpu->pgm .s.CTX_SUFF(pStatTrap0eAttribution)= &pVCpu->pgm.s.Stats.StatRZTrap0eTime2HndPhys; });365 STAM_STATS({ pVCpu->pgmr0.s.pStatTrap0eAttributionR0 = &pVCpu->pgm.s.Stats.StatRZTrap0eTime2HndPhys; }); 366 366 return rcStrict; 367 367 } … … 392 392 AssertMsgRC(rcStrict, ("%Rrc\n", VBOXSTRICTRC_VAL(rcStrict))); 393 393 STAM_COUNTER_INC(&pVCpu->pgm.s.Stats.StatRZTrap0eHandlersOutOfSync); 394 STAM_STATS({ pVCpu->pgm .s.CTX_SUFF(pStatTrap0eAttribution)= &pVCpu->pgm.s.Stats.StatRZTrap0eTime2OutOfSyncHndPhys; });394 STAM_STATS({ pVCpu->pgmr0.s.pStatTrap0eAttributionR0 = &pVCpu->pgm.s.Stats.StatRZTrap0eTime2OutOfSyncHndPhys; }); 395 395 return rcStrict; 396 396 } … … 402 402 rcStrict = PGMInterpretInstruction(pVM, pVCpu, pRegFrame, pvFault); 403 403 LogFlow(("PGM: PGMInterpretInstruction -> rcStrict=%d pPage=%R[pgmpage]\n", VBOXSTRICTRC_VAL(rcStrict), pPage)); 404 STAM_STATS({ pVCpu->pgm .s.CTX_SUFF(pStatTrap0eAttribution)= &pVCpu->pgm.s.Stats.StatRZTrap0eTime2HndUnhandled; });404 STAM_STATS({ pVCpu->pgmr0.s.pStatTrap0eAttributionR0 = &pVCpu->pgm.s.Stats.StatRZTrap0eTime2HndUnhandled; }); 405 405 return rcStrict; 406 406 } /* if any kind of handler */ … … 627 627 if (rc == VINF_PGM_HANDLED_DIRTY_BIT_FAULT) 628 628 { 629 STAM_STATS({ pVCpu->pgm .s.CTX_SUFF(pStatTrap0eAttribution)629 STAM_STATS({ pVCpu->pgmr0.s.pStatTrap0eAttributionR0 630 630 = rc == VINF_PGM_HANDLED_DIRTY_BIT_FAULT 631 631 ? &pVCpu->pgm.s.Stats.StatRZTrap0eTime2DirtyAndAccessed … … 663 663 && !SHW_PDE_IS_P(pPDDst->a[iPDDst])) 664 664 { 665 STAM_STATS({ pVCpu->pgm .s.CTX_SUFF(pStatTrap0eAttribution)= &pVCpu->pgm.s.Stats.StatRZTrap0eTime2SyncPT; });665 STAM_STATS({ pVCpu->pgmr0.s.pStatTrap0eAttributionR0 = &pVCpu->pgm.s.Stats.StatRZTrap0eTime2SyncPT; }); 666 666 # if PGM_WITH_PAGING(PGM_GST_TYPE, PGM_SHW_TYPE) 667 667 LogFlow(("=>SyncPT %04x = %08RX64\n", (pvFault >> GST_PD_SHIFT) & GST_PD_MASK, (uint64_t)GstWalk.Pde.u)); … … 707 707 Log(("Trap0e: Detected Conflict %RGv-%RGv\n", pMapping->GCPtr, pMapping->GCPtrLast)); 708 708 VMCPU_FF_SET(pVCpu, VMCPU_FF_PGM_SYNC_CR3); /** @todo no need to do global sync,right? */ 709 STAM_STATS({ pVCpu->pgm .s.CTX_SUFF(pStatTrap0eAttribution)= &pVCpu->pgm.s.Stats.StatRZTrap0eTime2Mapping; });709 STAM_STATS({ pVCpu->pgmr0.s.pStatTrap0eAttributionR0 = &pVCpu->pgm.s.Stats.StatRZTrap0eTime2Mapping; }); 710 710 return VINF_PGM_SYNC_CR3; 711 711 } … … 718 718 STAM_COUNTER_INC(&pVCpu->pgm.s.Stats.StatRZTrap0eGuestPFMapping); 719 719 LogFlow(("PGM: Mapping access -> route trap to recompiler!\n")); 720 STAM_STATS({ pVCpu->pgm .s.CTX_SUFF(pStatTrap0eAttribution)= &pVCpu->pgm.s.Stats.StatRZTrap0eTime2Mapping; });720 STAM_STATS({ pVCpu->pgmr0.s.pStatTrap0eAttributionR0 = &pVCpu->pgm.s.Stats.StatRZTrap0eTime2Mapping; }); 721 721 return VINF_EM_RAW_GUEST_TRAP; 722 722 } … … 749 749 LogFlow(("PGM #PF: pgmPhysGetPageEx(%RGp) failed with %Rrc\n", GCPhys, rc)); 750 750 STAM_COUNTER_INC(&pVCpu->pgm.s.Stats.StatRZTrap0eHandlersInvalid); 751 STAM_STATS({ pVCpu->pgm .s.CTX_SUFF(pStatTrap0eAttribution)= &pVCpu->pgm.s.Stats.StatRZTrap0eTime2InvalidPhys; });751 STAM_STATS({ pVCpu->pgmr0.s.pStatTrap0eAttributionR0 = &pVCpu->pgm.s.Stats.StatRZTrap0eTime2InvalidPhys; }); 752 752 return VINF_EM_RAW_EMULATE_INSTR; 753 753 } … … 788 788 LogFlow(("PGM: PGMInterpretInstruction balloon -> rc=%d pPage=%R[pgmpage]\n", rc, pPage)); 789 789 STAM_COUNTER_INC(&pVCpu->pgm.s.Stats.CTX_MID_Z(Stat,PageOutOfSyncBallloon)); 790 STAM_STATS({ pVCpu->pgm .s.CTX_SUFF(pStatTrap0eAttribution)= &pVCpu->pgm.s.Stats.StatRZTrap0eTime2Ballooned; });790 STAM_STATS({ pVCpu->pgmr0.s.pStatTrap0eAttributionR0 = &pVCpu->pgm.s.Stats.StatRZTrap0eTime2Ballooned; }); 791 791 return rc; 792 792 } … … 800 800 { 801 801 /* The page was successfully synced, return to the guest. */ 802 STAM_STATS({ pVCpu->pgm .s.CTX_SUFF(pStatTrap0eAttribution)= &pVCpu->pgm.s.Stats.StatRZTrap0eTime2OutOfSync; });802 STAM_STATS({ pVCpu->pgmr0.s.pStatTrap0eAttributionR0 = &pVCpu->pgm.s.Stats.StatRZTrap0eTime2OutOfSync; }); 803 803 return VINF_SUCCESS; 804 804 } … … 827 827 Assert(!PGM_PAGE_IS_ZERO(pPage)); 828 828 AssertFatalMsg(!PGM_PAGE_IS_BALLOONED(pPage), ("Unexpected ballooned page at %RGp\n", GCPhys)); 829 STAM_STATS({ pVCpu->pgm .s.CTX_SUFF(pStatTrap0eAttribution)= &pVCpu->pgm.s.Stats.StatRZTrap0eTime2MakeWritable; });829 STAM_STATS({ pVCpu->pgmr0.s.pStatTrap0eAttributionR0 = &pVCpu->pgm.s.Stats.StatRZTrap0eTime2MakeWritable; }); 830 830 831 831 rc = pgmPhysPageMakeWritable(pVM, pPage, GCPhys); … … 873 873 PGM_INVL_PG(pVCpu, pvFault); 874 874 pVCpu->pgm.s.cNetwareWp0Hacks++; 875 STAM_STATS({ pVCpu->pgm .s.CTX_SUFF(pStatTrap0eAttribution)= &pVCpu->pgm.s.Stats.StatRZTrap0eTime2Wp0RoUsHack; });875 STAM_STATS({ pVCpu->pgmr0.s.pStatTrap0eAttributionR0 = &pVCpu->pgm.s.Stats.StatRZTrap0eTime2Wp0RoUsHack; }); 876 876 return rc; 877 877 } … … 888 888 else 889 889 STAM_COUNTER_INC(&pVCpu->pgm.s.Stats.StatRZTrap0eWPEmulToR3); 890 STAM_STATS({ pVCpu->pgm .s.CTX_SUFF(pStatTrap0eAttribution)= &pVCpu->pgm.s.Stats.StatRZTrap0eTime2WPEmulation; });890 STAM_STATS({ pVCpu->pgmr0.s.pStatTrap0eAttributionR0 = &pVCpu->pgm.s.Stats.StatRZTrap0eTime2WPEmulation; }); 891 891 return rc; 892 892 } … … 936 936 # endif 937 937 # endif /* VBOX_STRICT */ 938 STAM_STATS({ pVCpu->pgm .s.CTX_SUFF(pStatTrap0eAttribution)= &pVCpu->pgm.s.Stats.StatRZTrap0eTime2OutOfSyncHndObs; });938 STAM_STATS({ pVCpu->pgmr0.s.pStatTrap0eAttributionR0 = &pVCpu->pgm.s.Stats.StatRZTrap0eTime2OutOfSyncHndObs; }); 939 939 return VINF_SUCCESS; 940 940 } … … 960 960 PGM_INVL_PG(pVCpu, pvFault); 961 961 pVCpu->pgm.s.cNetwareWp0Hacks--; 962 STAM_STATS({ pVCpu->pgm .s.CTX_SUFF(pStatTrap0eAttribution)= &pVCpu->pgm.s.Stats.StatRZTrap0eTime2Wp0RoUsUnhack; });962 STAM_STATS({ pVCpu->pgmr0.s.pStatTrap0eAttributionR0 = &pVCpu->pgm.s.Stats.StatRZTrap0eTime2Wp0RoUsUnhack; }); 963 963 return VINF_SUCCESS; 964 964 } -
trunk/src/VBox/VMM/VMMR0/PGMR0.cpp
r91247 r91250 598 598 LogFlow(("PGMTrap0eHandler: uErr=%RGx GCPhysFault=%RGp eip=%RGv\n", uErr, GCPhysFault, (RTGCPTR)pRegFrame->rip)); 599 599 STAM_PROFILE_START(&pGVCpu->pgm.s.StatRZTrap0e, a); 600 STAM_STATS({ pGVCpu->pgm .s.CTX_SUFF(pStatTrap0eAttribution)= NULL; } );600 STAM_STATS({ pGVCpu->pgmr0.s.pStatTrap0eAttributionR0 = NULL; } ); 601 601 602 602 /* AMD uses the host's paging mode; Intel has a single mode (EPT). */ … … 700 700 } 701 701 702 STAM_STATS({ if (!pGVCpu->pgm .s.CTX_SUFF(pStatTrap0eAttribution))703 pGVCpu->pgm .s.CTX_SUFF(pStatTrap0eAttribution)= &pGVCpu->pgm.s.Stats.StatRZTrap0eTime2Misc; });704 STAM_PROFILE_STOP_EX(&pGVCpu->pgm.s.Stats.StatRZTrap0e, pGVCpu->pgm .s.CTX_SUFF(pStatTrap0eAttribution), a);702 STAM_STATS({ if (!pGVCpu->pgmr0.s.pStatTrap0eAttributionR0) 703 pGVCpu->pgmr0.s.pStatTrap0eAttributionR0 = &pGVCpu->pgm.s.Stats.StatRZTrap0eTime2Misc; }); 704 STAM_PROFILE_STOP_EX(&pGVCpu->pgm.s.Stats.StatRZTrap0e, pGVCpu->pgmr0.s.pStatTrap0eAttributionR0, a); 705 705 return rc; 706 706 } -
trunk/src/VBox/VMM/include/PGMInternal.h
r91249 r91250 3632 3632 3633 3633 #ifdef VBOX_WITH_STATISTICS 3634 /** @name Statistics3635 * @{ */3636 /** R0: Which statistic this \#PF should be attributed to. */3637 R0PTRTYPE(PSTAMPROFILE) pStatTrap0eAttributionR0;3638 3634 /** These are statistics that used to be on the hyper heap. */ 3639 3635 PGMCPUSTATS Stats; 3640 /** @} */3641 3636 #endif 3642 3637 } PGMCPU; … … 3661 3656 #define PGM_SYNC_CLEAR_PGM_POOL RT_BIT(PGM_SYNC_CLEAR_PGM_POOL_BIT) 3662 3657 /** @} */ 3658 3659 3660 /** 3661 * PGM GVMCPU instance data. 3662 */ 3663 typedef struct PGMR0PERVCPU 3664 { 3665 #ifdef VBOX_WITH_STATISTICS 3666 /** R0: Which statistic this \#PF should be attributed to. */ 3667 R0PTRTYPE(PSTAMPROFILE) pStatTrap0eAttributionR0; 3668 #endif 3669 uint64_t u64Dummy; 3670 } PGMR0PERVCPU; 3663 3671 3664 3672
Note:
See TracChangeset
for help on using the changeset viewer.