Changeset 91247 in vbox
- Timestamp:
- Sep 15, 2021 12:20:52 PM (3 years ago)
- Location:
- trunk
- Files:
-
- 14 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/include/VBox/vmm/vm.h
r90975 r91247 290 290 struct PGMCPU s; 291 291 #endif 292 uint8_t padding[4096 ];/* multiple of 4096 */292 uint8_t padding[4096 + 28672]; /* multiple of 4096 */ 293 293 } pgm; 294 294 … … 1283 1283 struct PGM s; 1284 1284 #endif 1285 uint8_t padding[21120]; 1285 uint8_t padding[21120]; /* multiple of 64 */ 1286 1286 } pgm; 1287 1287 -
trunk/include/VBox/vmm/vm.mac
r90975 r91247 89 89 90 90 alignb 4096 91 .pgm resb 4096 91 .pgm resb 4096+28672 92 92 alignb 4096 93 93 .cpum resb 4096 -
trunk/src/VBox/VMM/VMMAll/PGMAll.cpp
r91016 r91247 892 892 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 STAM_PROFILE_START(&pVCpu->pgm.s. CTX_SUFF(pStats)->StatRZTrap0e, a);894 STAM_PROFILE_START(&pVCpu->pgm.s.Stats.StatRZTrap0e, a); 895 895 STAM_STATS({ pVCpu->pgm.s.CTX_SUFF(pStatTrap0eAttribution) = NULL; } ); 896 896 … … 905 905 { 906 906 if (uErr & X86_TRAP_PF_RW) 907 STAM_COUNTER_INC(&pVCpu->pgm.s. CTX_SUFF(pStats)->StatRZTrap0eUSNotPresentWrite);907 STAM_COUNTER_INC(&pVCpu->pgm.s.Stats.StatRZTrap0eUSNotPresentWrite); 908 908 else 909 STAM_COUNTER_INC(&pVCpu->pgm.s. CTX_SUFF(pStats)->StatRZTrap0eUSNotPresentRead);909 STAM_COUNTER_INC(&pVCpu->pgm.s.Stats.StatRZTrap0eUSNotPresentRead); 910 910 } 911 911 else if (uErr & X86_TRAP_PF_RW) 912 STAM_COUNTER_INC(&pVCpu->pgm.s. CTX_SUFF(pStats)->StatRZTrap0eUSWrite);912 STAM_COUNTER_INC(&pVCpu->pgm.s.Stats.StatRZTrap0eUSWrite); 913 913 else if (uErr & X86_TRAP_PF_RSVD) 914 STAM_COUNTER_INC(&pVCpu->pgm.s. CTX_SUFF(pStats)->StatRZTrap0eUSReserved);914 STAM_COUNTER_INC(&pVCpu->pgm.s.Stats.StatRZTrap0eUSReserved); 915 915 else if (uErr & X86_TRAP_PF_ID) 916 STAM_COUNTER_INC(&pVCpu->pgm.s. CTX_SUFF(pStats)->StatRZTrap0eUSNXE);916 STAM_COUNTER_INC(&pVCpu->pgm.s.Stats.StatRZTrap0eUSNXE); 917 917 else 918 STAM_COUNTER_INC(&pVCpu->pgm.s. CTX_SUFF(pStats)->StatRZTrap0eUSRead);918 STAM_COUNTER_INC(&pVCpu->pgm.s.Stats.StatRZTrap0eUSRead); 919 919 } 920 920 else … … 923 923 { 924 924 if (uErr & X86_TRAP_PF_RW) 925 STAM_COUNTER_INC(&pVCpu->pgm.s. CTX_SUFF(pStats)->StatRZTrap0eSVNotPresentWrite);925 STAM_COUNTER_INC(&pVCpu->pgm.s.Stats.StatRZTrap0eSVNotPresentWrite); 926 926 else 927 STAM_COUNTER_INC(&pVCpu->pgm.s. CTX_SUFF(pStats)->StatRZTrap0eSVNotPresentRead);927 STAM_COUNTER_INC(&pVCpu->pgm.s.Stats.StatRZTrap0eSVNotPresentRead); 928 928 } 929 929 else if (uErr & X86_TRAP_PF_RW) 930 STAM_COUNTER_INC(&pVCpu->pgm.s. CTX_SUFF(pStats)->StatRZTrap0eSVWrite);930 STAM_COUNTER_INC(&pVCpu->pgm.s.Stats.StatRZTrap0eSVWrite); 931 931 else if (uErr & X86_TRAP_PF_ID) 932 STAM_COUNTER_INC(&pVCpu->pgm.s. CTX_SUFF(pStats)->StatRZTrap0eSNXE);932 STAM_COUNTER_INC(&pVCpu->pgm.s.Stats.StatRZTrap0eSNXE); 933 933 else if (uErr & X86_TRAP_PF_RSVD) 934 STAM_COUNTER_INC(&pVCpu->pgm.s. CTX_SUFF(pStats)->StatRZTrap0eSVReserved);934 STAM_COUNTER_INC(&pVCpu->pgm.s.Stats.StatRZTrap0eSVReserved); 935 935 } 936 936 # endif /* VBOX_WITH_STATISTICS */ … … 971 971 } 972 972 973 STAM_STATS({ if (rc == VINF_EM_RAW_GUEST_TRAP) STAM_COUNTER_INC(&pVCpu->pgm.s. CTX_SUFF(pStats)->StatRZTrap0eGuestPF); });973 STAM_STATS({ if (rc == VINF_EM_RAW_GUEST_TRAP) STAM_COUNTER_INC(&pVCpu->pgm.s.Stats.StatRZTrap0eGuestPF); }); 974 974 STAM_STATS({ if (!pVCpu->pgm.s.CTX_SUFF(pStatTrap0eAttribution)) 975 pVCpu->pgm.s.CTX_SUFF(pStatTrap0eAttribution) = &pVCpu->pgm.s. CTX_SUFF(pStats)->StatRZTrap0eTime2Misc; });976 STAM_PROFILE_STOP_EX(&pVCpu->pgm.s. CTX_SUFF(pStats)->StatRZTrap0e, pVCpu->pgm.s.CTX_SUFF(pStatTrap0eAttribution), a);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); 977 977 return rc; 978 978 } … … 994 994 VMMDECL(int) PGMPrefetchPage(PVMCPUCC pVCpu, RTGCPTR GCPtrPage) 995 995 { 996 STAM_PROFILE_START(&pVCpu->pgm.s. CTX_SUFF(pStats)->CTX_MID_Z(Stat,Prefetch), a);996 STAM_PROFILE_START(&pVCpu->pgm.s.Stats.CTX_MID_Z(Stat,Prefetch), a); 997 997 998 998 uintptr_t const idxBth = pVCpu->pgm.s.idxBothModeData; … … 1001 1001 int rc = g_aPgmBothModeData[idxBth].pfnPrefetchPage(pVCpu, GCPtrPage); 1002 1002 1003 STAM_PROFILE_STOP(&pVCpu->pgm.s. CTX_SUFF(pStats)->CTX_MID_Z(Stat,Prefetch), a);1003 STAM_PROFILE_STOP(&pVCpu->pgm.s.Stats.CTX_MID_Z(Stat,Prefetch), a); 1004 1004 AssertMsg(rc == VINF_SUCCESS || rc == VINF_PGM_SYNC_CR3 || RT_FAILURE(rc), ("rc=%Rrc\n", rc)); 1005 1005 return rc; … … 1224 1224 * Call paging mode specific worker. 1225 1225 */ 1226 STAM_PROFILE_START(&pVCpu->pgm.s. CTX_SUFF(pStats)->CTX_MID_Z(Stat,InvalidatePage), a);1226 STAM_PROFILE_START(&pVCpu->pgm.s.Stats.CTX_MID_Z(Stat,InvalidatePage), a); 1227 1227 PGM_LOCK_VOID(pVM); 1228 1228 … … 1233 1233 1234 1234 PGM_UNLOCK(pVM); 1235 STAM_PROFILE_STOP(&pVCpu->pgm.s. CTX_SUFF(pStats)->CTX_MID_Z(Stat,InvalidatePage), a);1235 STAM_PROFILE_STOP(&pVCpu->pgm.s.Stats.CTX_MID_Z(Stat,InvalidatePage), a); 1236 1236 1237 1237 #ifdef IN_RING3 … … 2155 2155 VMMDECL(int) PGMGstModifyPage(PVMCPUCC pVCpu, RTGCPTR GCPtr, size_t cb, uint64_t fFlags, uint64_t fMask) 2156 2156 { 2157 STAM_PROFILE_START(&pVCpu->pgm.s. CTX_SUFF(pStats)->CTX_MID_Z(Stat,GstModifyPage), a);2157 STAM_PROFILE_START(&pVCpu->pgm.s.Stats.CTX_MID_Z(Stat,GstModifyPage), a); 2158 2158 VMCPU_ASSERT_EMT(pVCpu); 2159 2159 … … 2181 2181 int rc = g_aPgmGuestModeData[idx].pfnModifyPage(pVCpu, GCPtr, cb, fFlags, fMask); 2182 2182 2183 STAM_PROFILE_STOP(&pVCpu->pgm.s. CTX_SUFF(pStats)->CTX_MID_Z(Stat,GstModifyPage), a);2183 STAM_PROFILE_STOP(&pVCpu->pgm.s.Stats.CTX_MID_Z(Stat,GstModifyPage), a); 2184 2184 return rc; 2185 2185 } … … 2441 2441 VMMDECL(int) PGMFlushTLB(PVMCPUCC pVCpu, uint64_t cr3, bool fGlobal) 2442 2442 { 2443 STAM_PROFILE_START(&pVCpu->pgm.s. CTX_SUFF(pStats)->CTX_MID_Z(Stat,FlushTLB), a);2443 STAM_PROFILE_START(&pVCpu->pgm.s.Stats.CTX_MID_Z(Stat,FlushTLB), a); 2444 2444 PVMCC pVM = pVCpu->CTX_SUFF(pVM); 2445 2445 … … 2501 2501 2502 2502 if (fGlobal) 2503 STAM_COUNTER_INC(&pVCpu->pgm.s. CTX_SUFF(pStats)->CTX_MID_Z(Stat,FlushTLBNewCR3Global));2503 STAM_COUNTER_INC(&pVCpu->pgm.s.Stats.CTX_MID_Z(Stat,FlushTLBNewCR3Global)); 2504 2504 else 2505 STAM_COUNTER_INC(&pVCpu->pgm.s. CTX_SUFF(pStats)->CTX_MID_Z(Stat,FlushTLBNewCR3));2505 STAM_COUNTER_INC(&pVCpu->pgm.s.Stats.CTX_MID_Z(Stat,FlushTLBNewCR3)); 2506 2506 } 2507 2507 else … … 2525 2525 } 2526 2526 if (fGlobal) 2527 STAM_COUNTER_INC(&pVCpu->pgm.s. CTX_SUFF(pStats)->CTX_MID_Z(Stat,FlushTLBSameCR3Global));2527 STAM_COUNTER_INC(&pVCpu->pgm.s.Stats.CTX_MID_Z(Stat,FlushTLBSameCR3Global)); 2528 2528 else 2529 STAM_COUNTER_INC(&pVCpu->pgm.s. CTX_SUFF(pStats)->CTX_MID_Z(Stat,FlushTLBSameCR3));2529 STAM_COUNTER_INC(&pVCpu->pgm.s.Stats.CTX_MID_Z(Stat,FlushTLBSameCR3)); 2530 2530 } 2531 2531 2532 2532 IEMTlbInvalidateAll(pVCpu, false /*fVmm*/); 2533 STAM_PROFILE_STOP(&pVCpu->pgm.s. CTX_SUFF(pStats)->CTX_MID_Z(Stat,FlushTLB), a);2533 STAM_PROFILE_STOP(&pVCpu->pgm.s.Stats.CTX_MID_Z(Stat,FlushTLB), a); 2534 2534 return rc; 2535 2535 } … … 2708 2708 * Let the 'Bth' function do the work and we'll just keep track of the flags. 2709 2709 */ 2710 STAM_PROFILE_START(&pVCpu->pgm.s. CTX_SUFF(pStats)->CTX_MID_Z(Stat,SyncCR3), a);2710 STAM_PROFILE_START(&pVCpu->pgm.s.Stats.CTX_MID_Z(Stat,SyncCR3), a); 2711 2711 2712 2712 uintptr_t const idxBth = pVCpu->pgm.s.idxBothModeData; … … 2715 2715 rc = g_aPgmBothModeData[idxBth].pfnSyncCR3(pVCpu, cr0, cr3, cr4, fGlobal); 2716 2716 2717 STAM_PROFILE_STOP(&pVCpu->pgm.s. CTX_SUFF(pStats)->CTX_MID_Z(Stat,SyncCR3), a);2717 STAM_PROFILE_STOP(&pVCpu->pgm.s.Stats.CTX_MID_Z(Stat,SyncCR3), a); 2718 2718 AssertMsg(rc == VINF_SUCCESS || rc == VINF_PGM_SYNC_CR3 || RT_FAILURE(rc), ("rc=%Rrc\n", rc)); 2719 2719 if (rc == VINF_SUCCESS) … … 3701 3701 VMMDECL(unsigned) PGMAssertCR3(PVMCC pVM, PVMCPUCC pVCpu, uint64_t cr3, uint64_t cr4) 3702 3702 { 3703 STAM_PROFILE_START(&pVCpu->pgm.s. CTX_SUFF(pStats)->CTX_MID_Z(Stat,SyncCR3), a);3703 STAM_PROFILE_START(&pVCpu->pgm.s.Stats.CTX_MID_Z(Stat,SyncCR3), a); 3704 3704 3705 3705 uintptr_t const idxBth = pVCpu->pgm.s.idxBothModeData; … … 3711 3711 PGM_UNLOCK(pVM); 3712 3712 3713 STAM_PROFILE_STOP(&pVCpu->pgm.s. CTX_SUFF(pStats)->CTX_MID_Z(Stat,SyncCR3), a);3713 STAM_PROFILE_STOP(&pVCpu->pgm.s.Stats.CTX_MID_Z(Stat,SyncCR3), a); 3714 3714 return cErrors; 3715 3715 } -
trunk/src/VBox/VMM/VMMAll/PGMAllBth.h
r91016 r91247 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. CTX_SUFF(pStats)->StatRZTrap0eTime2GuestTrap; });200 STAM_STATS({ pVCpu->pgm.s.CTX_SUFF(pStatTrap0eAttribution) = &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. CTX_SUFF(pStats)->StatRZTrap0eTime2GuestTrap; });222 STAM_STATS({ pVCpu->pgm.s.CTX_SUFF(pStatTrap0eAttribution) = &pVCpu->pgm.s.Stats.StatRZTrap0eTime2GuestTrap; }); 223 223 return VINF_EM_RAW_GUEST_TRAP; 224 224 } … … 292 292 { 293 293 AssertMsgRC(rcStrict, ("%Rrc\n", VBOXSTRICTRC_VAL(rcStrict))); 294 STAM_COUNTER_INC(&pVCpu->pgm.s. CTX_SUFF(pStats)->StatRZTrap0eHandlersOutOfSync);295 STAM_STATS({ pVCpu->pgm.s.CTX_SUFF(pStatTrap0eAttribution) = &pVCpu->pgm.s. CTX_SUFF(pStats)->StatRZTrap0eTime2OutOfSyncHndPhys; });294 STAM_COUNTER_INC(&pVCpu->pgm.s.Stats.StatRZTrap0eHandlersOutOfSync); 295 STAM_STATS({ pVCpu->pgm.s.CTX_SUFF(pStatTrap0eAttribution) = &pVCpu->pgm.s.Stats.StatRZTrap0eTime2OutOfSyncHndPhys; }); 296 296 return rcStrict; 297 297 } … … 319 319 { 320 320 AssertMsgRC(rcStrict, ("%Rrc\n", VBOXSTRICTRC_VAL(rcStrict))); 321 STAM_COUNTER_INC(&pVCpu->pgm.s. CTX_SUFF(pStats)->StatRZTrap0eHandlersOutOfSync);322 STAM_STATS({ pVCpu->pgm.s.CTX_SUFF(pStatTrap0eAttribution) = &pVCpu->pgm.s. CTX_SUFF(pStats)->StatRZTrap0eTime2OutOfSyncHndPhys; });321 STAM_COUNTER_INC(&pVCpu->pgm.s.Stats.StatRZTrap0eHandlersOutOfSync); 322 STAM_STATS({ pVCpu->pgm.s.CTX_SUFF(pStatTrap0eAttribution) = &pVCpu->pgm.s.Stats.StatRZTrap0eTime2OutOfSyncHndPhys; }); 323 323 return rcStrict; 324 324 } … … 331 331 pvFault, GCPhysFault, pPage, uErr, pCurType->enmKind)); 332 332 if (pCurType->enmKind == PGMPHYSHANDLERKIND_WRITE) 333 STAM_COUNTER_INC(&pVCpu->pgm.s. CTX_SUFF(pStats)->StatRZTrap0eHandlersPhysWrite);333 STAM_COUNTER_INC(&pVCpu->pgm.s.Stats.StatRZTrap0eHandlersPhysWrite); 334 334 else 335 335 { 336 STAM_COUNTER_INC(&pVCpu->pgm.s. CTX_SUFF(pStats)->StatRZTrap0eHandlersPhysAll);337 if (uErr & X86_TRAP_PF_RSVD) STAM_COUNTER_INC(&pVCpu->pgm.s. CTX_SUFF(pStats)->StatRZTrap0eHandlersPhysAllOpt);336 STAM_COUNTER_INC(&pVCpu->pgm.s.Stats.StatRZTrap0eHandlersPhysAll); 337 if (uErr & X86_TRAP_PF_RSVD) STAM_COUNTER_INC(&pVCpu->pgm.s.Stats.StatRZTrap0eHandlersPhysAllOpt); 338 338 } 339 339 … … 363 363 rcStrict = VINF_EM_RAW_EMULATE_INSTR; 364 364 365 STAM_STATS({ pVCpu->pgm.s.CTX_SUFF(pStatTrap0eAttribution) = &pVCpu->pgm.s. CTX_SUFF(pStats)->StatRZTrap0eTime2HndPhys; });365 STAM_STATS({ pVCpu->pgm.s.CTX_SUFF(pStatTrap0eAttribution) = &pVCpu->pgm.s.Stats.StatRZTrap0eTime2HndPhys; }); 366 366 return rcStrict; 367 367 } … … 376 376 * write access handlers. Restart the instruction if it wasn't a write access. 377 377 */ 378 STAM_COUNTER_INC(&pVCpu->pgm.s. CTX_SUFF(pStats)->StatRZTrap0eHandlersUnhandled);378 STAM_COUNTER_INC(&pVCpu->pgm.s.Stats.StatRZTrap0eHandlersUnhandled); 379 379 380 380 if ( !PGM_PAGE_HAS_ACTIVE_ALL_HANDLERS(pPage) … … 391 391 { 392 392 AssertMsgRC(rcStrict, ("%Rrc\n", VBOXSTRICTRC_VAL(rcStrict))); 393 STAM_COUNTER_INC(&pVCpu->pgm.s. CTX_SUFF(pStats)->StatRZTrap0eHandlersOutOfSync);394 STAM_STATS({ pVCpu->pgm.s.CTX_SUFF(pStatTrap0eAttribution) = &pVCpu->pgm.s. CTX_SUFF(pStats)->StatRZTrap0eTime2OutOfSyncHndPhys; });393 STAM_COUNTER_INC(&pVCpu->pgm.s.Stats.StatRZTrap0eHandlersOutOfSync); 394 STAM_STATS({ pVCpu->pgm.s.CTX_SUFF(pStatTrap0eAttribution) = &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. CTX_SUFF(pStats)->StatRZTrap0eTime2HndUnhandled; });404 STAM_STATS({ pVCpu->pgm.s.CTX_SUFF(pStatTrap0eAttribution) = &pVCpu->pgm.s.Stats.StatRZTrap0eTime2HndUnhandled; }); 405 405 return rcStrict; 406 406 } /* if any kind of handler */ … … 519 519 # ifdef VBOX_WITH_STATISTICS 520 520 if (GstWalk.Pte.u & X86_PTE_D) 521 STAM_COUNTER_INC(&pVCpu->pgm.s. CTX_SUFF(pStats)->CTX_MID_Z(Stat,PageAlreadyDirty));521 STAM_COUNTER_INC(&pVCpu->pgm.s.Stats.CTX_MID_Z(Stat,PageAlreadyDirty)); 522 522 else 523 STAM_COUNTER_INC(&pVCpu->pgm.s. CTX_SUFF(pStats)->CTX_MID_Z(Stat,DirtiedPage));523 STAM_COUNTER_INC(&pVCpu->pgm.s.Stats.CTX_MID_Z(Stat,DirtiedPage)); 524 524 # endif 525 525 if ((GstWalk.Pte.u & (X86_PTE_A | X86_PTE_D)) != (X86_PTE_A | X86_PTE_D)) … … 622 622 if (uErr & X86_TRAP_PF_RW) /* write fault? */ 623 623 { 624 STAM_PROFILE_START(&pVCpu->pgm.s. CTX_SUFF(pStats)->CTX_MID_Z(Stat,DirtyBitTracking), a);624 STAM_PROFILE_START(&pVCpu->pgm.s.Stats.CTX_MID_Z(Stat,DirtyBitTracking), a); 625 625 rc = PGM_BTH_NAME(CheckDirtyPageFault)(pVCpu, uErr, &pPDDst->a[iPDDst], GstWalk.pPde, pvFault); 626 STAM_PROFILE_STOP(&pVCpu->pgm.s. CTX_SUFF(pStats)->CTX_MID_Z(Stat,DirtyBitTracking), a);626 STAM_PROFILE_STOP(&pVCpu->pgm.s.Stats.CTX_MID_Z(Stat,DirtyBitTracking), a); 627 627 if (rc == VINF_PGM_HANDLED_DIRTY_BIT_FAULT) 628 628 { 629 629 STAM_STATS({ pVCpu->pgm.s.CTX_SUFF(pStatTrap0eAttribution) 630 630 = rc == VINF_PGM_HANDLED_DIRTY_BIT_FAULT 631 ? &pVCpu->pgm.s. CTX_SUFF(pStats)->StatRZTrap0eTime2DirtyAndAccessed632 : &pVCpu->pgm.s. CTX_SUFF(pStats)->StatRZTrap0eTime2GuestTrap; });631 ? &pVCpu->pgm.s.Stats.StatRZTrap0eTime2DirtyAndAccessed 632 : &pVCpu->pgm.s.Stats.StatRZTrap0eTime2GuestTrap; }); 633 633 Log8(("Trap0eHandler: returns VINF_SUCCESS\n")); 634 634 return VINF_SUCCESS; … … 663 663 && !SHW_PDE_IS_P(pPDDst->a[iPDDst])) 664 664 { 665 STAM_STATS({ pVCpu->pgm.s.CTX_SUFF(pStatTrap0eAttribution) = &pVCpu->pgm.s. CTX_SUFF(pStats)->StatRZTrap0eTime2SyncPT; });665 STAM_STATS({ pVCpu->pgm.s.CTX_SUFF(pStatTrap0eAttribution) = &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)); … … 704 704 if (GstWalk.pPde[iPT].n.u1Present) 705 705 { 706 STAM_COUNTER_INC(&pVCpu->pgm.s. CTX_SUFF(pStats)->StatRZTrap0eConflicts);706 STAM_COUNTER_INC(&pVCpu->pgm.s.Stats.StatRZTrap0eConflicts); 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. CTX_SUFF(pStats)->StatRZTrap0eTime2Mapping; });709 STAM_STATS({ pVCpu->pgm.s.CTX_SUFF(pStatTrap0eAttribution) = &pVCpu->pgm.s.Stats.StatRZTrap0eTime2Mapping; }); 710 710 return VINF_PGM_SYNC_CR3; 711 711 } … … 716 716 */ 717 717 TRPMSetErrorCode(pVCpu, uErr & ~X86_TRAP_PF_P); 718 STAM_COUNTER_INC(&pVCpu->pgm.s. CTX_SUFF(pStats)->StatRZTrap0eGuestPFMapping);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. CTX_SUFF(pStats)->StatRZTrap0eTime2Mapping; });720 STAM_STATS({ pVCpu->pgm.s.CTX_SUFF(pStatTrap0eAttribution) = &pVCpu->pgm.s.Stats.StatRZTrap0eTime2Mapping; }); 721 721 return VINF_EM_RAW_GUEST_TRAP; 722 722 } … … 748 748 */ 749 749 LogFlow(("PGM #PF: pgmPhysGetPageEx(%RGp) failed with %Rrc\n", GCPhys, rc)); 750 STAM_COUNTER_INC(&pVCpu->pgm.s. CTX_SUFF(pStats)->StatRZTrap0eHandlersInvalid);751 STAM_STATS({ pVCpu->pgm.s.CTX_SUFF(pStatTrap0eAttribution) = &pVCpu->pgm.s. CTX_SUFF(pStats)->StatRZTrap0eTime2InvalidPhys; });750 STAM_COUNTER_INC(&pVCpu->pgm.s.Stats.StatRZTrap0eHandlersInvalid); 751 STAM_STATS({ pVCpu->pgm.s.CTX_SUFF(pStatTrap0eAttribution) = &pVCpu->pgm.s.Stats.StatRZTrap0eTime2InvalidPhys; }); 752 752 return VINF_EM_RAW_EMULATE_INSTR; 753 753 } … … 776 776 */ 777 777 if (uErr & X86_TRAP_PF_US) 778 STAM_COUNTER_INC(&pVCpu->pgm.s. CTX_SUFF(pStats)->CTX_MID_Z(Stat,PageOutOfSyncUser));778 STAM_COUNTER_INC(&pVCpu->pgm.s.Stats.CTX_MID_Z(Stat,PageOutOfSyncUser)); 779 779 else /* supervisor */ 780 STAM_COUNTER_INC(&pVCpu->pgm.s. CTX_SUFF(pStats)->CTX_MID_Z(Stat,PageOutOfSyncSupervisor));780 STAM_COUNTER_INC(&pVCpu->pgm.s.Stats.CTX_MID_Z(Stat,PageOutOfSyncSupervisor)); 781 781 782 782 if (PGM_PAGE_IS_BALLOONED(pPage)) … … 787 787 rc = VBOXSTRICTRC_TODO(PGMInterpretInstruction(pVM, pVCpu, pRegFrame, pvFault)); 788 788 LogFlow(("PGM: PGMInterpretInstruction balloon -> rc=%d pPage=%R[pgmpage]\n", rc, pPage)); 789 STAM_COUNTER_INC(&pVCpu->pgm.s. CTX_SUFF(pStats)->CTX_MID_Z(Stat,PageOutOfSyncBallloon));790 STAM_STATS({ pVCpu->pgm.s.CTX_SUFF(pStatTrap0eAttribution) = &pVCpu->pgm.s. CTX_SUFF(pStats)->StatRZTrap0eTime2Ballooned; });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; }); 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. CTX_SUFF(pStats)->StatRZTrap0eTime2OutOfSync; });802 STAM_STATS({ pVCpu->pgm.s.CTX_SUFF(pStatTrap0eAttribution) = &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. CTX_SUFF(pStats)->StatRZTrap0eTime2MakeWritable; });829 STAM_STATS({ pVCpu->pgm.s.CTX_SUFF(pStatTrap0eAttribution) = &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. CTX_SUFF(pStats)->StatRZTrap0eTime2Wp0RoUsHack; });875 STAM_STATS({ pVCpu->pgm.s.CTX_SUFF(pStatTrap0eAttribution) = &pVCpu->pgm.s.Stats.StatRZTrap0eTime2Wp0RoUsHack; }); 876 876 return rc; 877 877 } … … 885 885 Log(("PGM #PF: WP0 emulation (pvFault=%RGp uErr=%#x cpl=%d fBig=%d fEffUs=%d)\n", pvFault, uErr, CPUMGetGuestCPL(pVCpu), GstWalk.Core.fBigPage, GstWalk.Core.fEffectiveUS)); 886 886 if (RT_SUCCESS(rc)) 887 STAM_COUNTER_INC(&pVCpu->pgm.s. CTX_SUFF(pStats)->StatRZTrap0eWPEmulInRZ);887 STAM_COUNTER_INC(&pVCpu->pgm.s.Stats.StatRZTrap0eWPEmulInRZ); 888 888 else 889 STAM_COUNTER_INC(&pVCpu->pgm.s. CTX_SUFF(pStats)->StatRZTrap0eWPEmulToR3);890 STAM_STATS({ pVCpu->pgm.s.CTX_SUFF(pStatTrap0eAttribution) = &pVCpu->pgm.s. CTX_SUFF(pStats)->StatRZTrap0eTime2WPEmulation; });889 STAM_COUNTER_INC(&pVCpu->pgm.s.Stats.StatRZTrap0eWPEmulToR3); 890 STAM_STATS({ pVCpu->pgm.s.CTX_SUFF(pStatTrap0eAttribution) = &pVCpu->pgm.s.Stats.StatRZTrap0eTime2WPEmulation; }); 891 891 return rc; 892 892 } … … 894 894 /// @todo count the above case; else 895 895 if (uErr & X86_TRAP_PF_US) 896 STAM_COUNTER_INC(&pVCpu->pgm.s. CTX_SUFF(pStats)->CTX_MID_Z(Stat,PageOutOfSyncUserWrite));896 STAM_COUNTER_INC(&pVCpu->pgm.s.Stats.CTX_MID_Z(Stat,PageOutOfSyncUserWrite)); 897 897 else /* supervisor */ 898 STAM_COUNTER_INC(&pVCpu->pgm.s. CTX_SUFF(pStats)->CTX_MID_Z(Stat,PageOutOfSyncSupervisorWrite));898 STAM_COUNTER_INC(&pVCpu->pgm.s.Stats.CTX_MID_Z(Stat,PageOutOfSyncSupervisorWrite)); 899 899 900 900 /* … … 936 936 # endif 937 937 # endif /* VBOX_STRICT */ 938 STAM_STATS({ pVCpu->pgm.s.CTX_SUFF(pStatTrap0eAttribution) = &pVCpu->pgm.s. CTX_SUFF(pStats)->StatRZTrap0eTime2OutOfSyncHndObs; });938 STAM_STATS({ pVCpu->pgm.s.CTX_SUFF(pStatTrap0eAttribution) = &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. CTX_SUFF(pStats)->StatRZTrap0eTime2Wp0RoUsUnhack; });962 STAM_STATS({ pVCpu->pgm.s.CTX_SUFF(pStatTrap0eAttribution) = &pVCpu->pgm.s.Stats.StatRZTrap0eTime2Wp0RoUsUnhack; }); 963 963 return VINF_SUCCESS; 964 964 } … … 1085 1085 if (!pShwPde) 1086 1086 { 1087 STAM_COUNTER_INC(&pVCpu->pgm.s. CTX_SUFF(pStats)->CTX_MID_Z(Stat,InvalidatePageSkipped));1087 STAM_COUNTER_INC(&pVCpu->pgm.s.Stats.CTX_MID_Z(Stat,InvalidatePageSkipped)); 1088 1088 return VINF_SUCCESS; 1089 1089 } … … 1106 1106 Assert(!pPdptDst || !(pPdptDst->a[iPdpt].u & PGM_PLXFLAGS_MAPPING)); 1107 1107 # endif 1108 STAM_COUNTER_INC(&pVCpu->pgm.s. CTX_SUFF(pStats)->CTX_MID_Z(Stat,InvalidatePageSkipped));1108 STAM_COUNTER_INC(&pVCpu->pgm.s.Stats.CTX_MID_Z(Stat,InvalidatePageSkipped)); 1109 1109 PGM_INVL_PG(pVCpu, GCPtrPage); 1110 1110 return VINF_SUCCESS; … … 1131 1131 { 1132 1132 AssertMsg(rc == VERR_PAGE_DIRECTORY_PTR_NOT_PRESENT || rc == VERR_PAGE_MAP_LEVEL4_NOT_PRESENT, ("Unexpected rc=%Rrc\n", rc)); 1133 STAM_COUNTER_INC(&pVCpu->pgm.s. CTX_SUFF(pStats)->CTX_MID_Z(Stat,InvalidatePageSkipped));1133 STAM_COUNTER_INC(&pVCpu->pgm.s.Stats.CTX_MID_Z(Stat,InvalidatePageSkipped)); 1134 1134 PGM_INVL_PG(pVCpu, GCPtrPage); 1135 1135 return VINF_SUCCESS; … … 1148 1148 if (!(PdeDst.u & X86_PDE_P)) 1149 1149 { 1150 STAM_COUNTER_INC(&pVCpu->pgm.s. CTX_SUFF(pStats)->CTX_MID_Z(Stat,InvalidatePageSkipped));1150 STAM_COUNTER_INC(&pVCpu->pgm.s.Stats.CTX_MID_Z(Stat,InvalidatePageSkipped)); 1151 1151 PGM_INVL_PG(pVCpu, GCPtrPage); 1152 1152 return VINF_SUCCESS; … … 1180 1180 const bool fIsBigPage = (PdeSrc.u & X86_PDE_PS) && GST_IS_PSE_ACTIVE(pVCpu); 1181 1181 if (fWasBigPage != fIsBigPage) 1182 STAM_COUNTER_INC(&pVCpu->pgm.s. CTX_SUFF(pStats)->CTX_MID_Z(Stat,InvalidatePageSkipped));1182 STAM_COUNTER_INC(&pVCpu->pgm.s.Stats.CTX_MID_Z(Stat,InvalidatePageSkipped)); 1183 1183 1184 1184 # ifdef IN_RING3 … … 1199 1199 # endif 1200 1200 { 1201 STAM_COUNTER_INC(&pVCpu->pgm.s. CTX_SUFF(pStats)->CTX_MID_Z(Stat,InvalidatePageSkipped));1201 STAM_COUNTER_INC(&pVCpu->pgm.s.Stats.CTX_MID_Z(Stat,InvalidatePageSkipped)); 1202 1202 return VINF_SUCCESS; 1203 1203 } … … 1257 1257 SHW_PTE_IS_TRACK_DIRTY(pPTDst->a[iPTDst]) ? " Track-Dirty" : "")); 1258 1258 } 1259 STAM_COUNTER_INC(&pVCpu->pgm.s. CTX_SUFF(pStats)->CTX_MID_Z(Stat,InvalidatePage4KBPages));1259 STAM_COUNTER_INC(&pVCpu->pgm.s.Stats.CTX_MID_Z(Stat,InvalidatePage4KBPages)); 1260 1260 PGM_INVL_PG(pVCpu, GCPtrPage); 1261 1261 } … … 1269 1269 pgmPoolFree(pVM, PdeDst.u & SHW_PDE_PG_MASK, pShwPde->idx, iPDDst); 1270 1270 SHW_PDE_ATOMIC_SET(*pPdeDst, 0); 1271 STAM_COUNTER_INC(&pVCpu->pgm.s. CTX_SUFF(pStats)->CTX_MID_Z(Stat,InvalidatePagePDOutOfSync));1271 STAM_COUNTER_INC(&pVCpu->pgm.s.Stats.CTX_MID_Z(Stat,InvalidatePagePDOutOfSync)); 1272 1272 PGM_INVL_VCPU_TLBS(pVCpu); 1273 1273 } … … 1297 1297 { 1298 1298 LogFlow(("Skipping flush for big page containing %RGv (PD=%X .u=%RX64)-> nothing has changed!\n", GCPtrPage, iPDSrc, PdeSrc.u)); 1299 STAM_COUNTER_INC(&pVCpu->pgm.s. CTX_SUFF(pStats)->CTX_MID_Z(Stat,InvalidatePage4MBPagesSkip));1299 STAM_COUNTER_INC(&pVCpu->pgm.s.Stats.CTX_MID_Z(Stat,InvalidatePage4MBPagesSkip)); 1300 1300 return VINF_SUCCESS; 1301 1301 } … … 1312 1312 pgmPoolFree(pVM, PdeDst.u & SHW_PDE_PG_MASK, pShwPde->idx, iPDDst); 1313 1313 SHW_PDE_ATOMIC_SET(*pPdeDst, 0); 1314 STAM_COUNTER_INC(&pVCpu->pgm.s. CTX_SUFF(pStats)->CTX_MID_Z(Stat,InvalidatePage4MBPages));1314 STAM_COUNTER_INC(&pVCpu->pgm.s.Stats.CTX_MID_Z(Stat,InvalidatePage4MBPages)); 1315 1315 PGM_INVL_BIG_PG(pVCpu, GCPtrPage); 1316 1316 } … … 1327 1327 pgmPoolFree(pVM, PdeDst.u & SHW_PDE_PG_MASK, pShwPde->idx, iPDDst); 1328 1328 SHW_PDE_ATOMIC_SET(*pPdeDst, 0); 1329 STAM_COUNTER_INC(&pVCpu->pgm.s. CTX_SUFF(pStats)->CTX_MID_Z(Stat,InvalidatePagePDNPs));1329 STAM_COUNTER_INC(&pVCpu->pgm.s.Stats.CTX_MID_Z(Stat,InvalidatePagePDNPs)); 1330 1330 PGM_INVL_PG(pVCpu, GCPtrPage); 1331 1331 } … … 1334 1334 { 1335 1335 Assert(pgmMapAreMappingsEnabled(pVM)); 1336 STAM_COUNTER_INC(&pVCpu->pgm.s. CTX_SUFF(pStats)->CTX_MID_Z(Stat,InvalidatePagePDMappings));1336 STAM_COUNTER_INC(&pVCpu->pgm.s.Stats.CTX_MID_Z(Stat,InvalidatePagePDMappings)); 1337 1337 } 1338 1338 # endif … … 1386 1386 # endif 1387 1387 1388 STAM_PROFILE_START(&pVM->pgm.s. CTX_SUFF(pStats)->StatTrackDeref, a);1388 STAM_PROFILE_START(&pVM->pgm.s.Stats.StatTrackDeref, a); 1389 1389 LogFlow(("SyncPageWorkerTrackDeref: Damn HCPhys=%RHp pShwPage->idx=%#x!!!\n", HCPhys, pShwPage->idx)); 1390 1390 … … 1415 1415 1416 1416 pgmTrackDerefGCPhys(pPool, pShwPage, &pRam->aPages[iPage], iPte); 1417 STAM_PROFILE_STOP(&pVM->pgm.s. CTX_SUFF(pStats)->StatTrackDeref, a);1417 STAM_PROFILE_STOP(&pVM->pgm.s.Stats.StatTrackDeref, a); 1418 1418 return; 1419 1419 } … … 1444 1444 if (!u16) 1445 1445 { 1446 STAM_COUNTER_INC(&pVM->pgm.s. CTX_SUFF(pStats)->StatTrackVirgin);1446 STAM_COUNTER_INC(&pVM->pgm.s.Stats.StatTrackVirgin); 1447 1447 u16 = PGMPOOL_TD_MAKE(1, pShwPage->idx); 1448 1448 /* Save the page table index. */ … … 1647 1647 { 1648 1648 LogFlow(("SyncPageWorker: page and or page directory not accessed -> mark not present\n")); 1649 STAM_COUNTER_INC(&pVCpu->pgm.s. CTX_SUFF(pStats)->CTX_MID_Z(Stat,AccessedPage));1649 STAM_COUNTER_INC(&pVCpu->pgm.s.Stats.CTX_MID_Z(Stat,AccessedPage)); 1650 1650 SHW_PTE_SET(PteDst, 0); 1651 1651 } … … 1657 1657 { 1658 1658 AssertCompile(X86_PTE_RW == X86_PDE_RW); 1659 STAM_COUNTER_INC(&pVCpu->pgm.s. CTX_SUFF(pStats)->CTX_MID_Z(Stat,DirtyPage));1659 STAM_COUNTER_INC(&pVCpu->pgm.s.Stats.CTX_MID_Z(Stat,DirtyPage)); 1660 1660 SHW_PTE_SET(PteDst, 1661 1661 fGstShwPteFlags … … 1667 1667 # endif 1668 1668 { 1669 STAM_COUNTER_INC(&pVCpu->pgm.s. CTX_SUFF(pStats)->CTX_MID_Z(Stat,DirtyPageSkipped));1669 STAM_COUNTER_INC(&pVCpu->pgm.s.Stats.CTX_MID_Z(Stat,DirtyPageSkipped)); 1670 1670 # if PGM_SHW_TYPE == PGM_TYPE_EPT 1671 1671 PteDst.u = PGM_PAGE_GET_HCPHYS(pPage) … … 2040 2040 if ((PdeSrc.u & (X86_PDE4M_D | X86_PDE_RW)) == X86_PDE_RW) 2041 2041 { 2042 STAM_COUNTER_INC(&pVCpu->pgm.s. CTX_SUFF(pStats)->CTX_MID_Z(Stat,DirtyPageBig));2042 STAM_COUNTER_INC(&pVCpu->pgm.s.Stats.CTX_MID_Z(Stat,DirtyPageBig)); 2043 2043 PdeDst.u |= PGM_PDFLAGS_TRACK_DIRTY; 2044 2044 PdeDst.u &= ~(SHWUINT)X86_PDE_RW; … … 2065 2065 } 2066 2066 2067 STAM_COUNTER_INC(&pVCpu->pgm.s. CTX_SUFF(pStats)->CTX_MID_Z(Stat,SyncPagePDNAs));2067 STAM_COUNTER_INC(&pVCpu->pgm.s.Stats.CTX_MID_Z(Stat,SyncPagePDNAs)); 2068 2068 } 2069 2069 else if (fPdeValid) 2070 2070 { 2071 STAM_COUNTER_INC(&pVCpu->pgm.s. CTX_SUFF(pStats)->CTX_MID_Z(Stat,SyncPagePDOutOfSync));2071 STAM_COUNTER_INC(&pVCpu->pgm.s.Stats.CTX_MID_Z(Stat,SyncPagePDOutOfSync)); 2072 2072 Log2(("SyncPage: Out-Of-Sync PDE at %RGp PdeSrc=%RX64 PdeDst=%RX64 (GCPhys %RGp vs %RGp)\n", 2073 2073 GCPtrPage, (uint64_t)PdeSrc.u, (uint64_t)PdeDst.u, pShwPage->GCPhys, GCPhys)); … … 2232 2232 DECLINLINE(int) PGM_BTH_NAME(CheckPageFaultReturnNP)(PVMCPUCC pVCpu, uint32_t uErr, RTGCPTR GCPtrPage, unsigned uPageFaultLevel) 2233 2233 { 2234 STAM_COUNTER_INC(&pVCpu->pgm.s. CTX_SUFF(pStats)->CTX_MID_Z(Stat,DirtyTrackRealPF));2234 STAM_COUNTER_INC(&pVCpu->pgm.s.Stats.CTX_MID_Z(Stat,DirtyTrackRealPF)); 2235 2235 AssertMsg(!(uErr & X86_TRAP_PF_P), ("%#x\n", uErr)); 2236 2236 AssertMsg(!(uErr & X86_TRAP_PF_RSVD), ("%#x\n", uErr)); … … 2257 2257 DECLINLINE(int) PGM_BTH_NAME(CheckPageFaultReturnRSVD)(PVMCPUCC pVCpu, uint32_t uErr, RTGCPTR GCPtrPage, unsigned uPageFaultLevel) 2258 2258 { 2259 STAM_COUNTER_INC(&pVCpu->pgm.s. CTX_SUFF(pStats)->CTX_MID_Z(Stat,DirtyTrackRealPF));2259 STAM_COUNTER_INC(&pVCpu->pgm.s.Stats.CTX_MID_Z(Stat,DirtyTrackRealPF)); 2260 2260 if ((uErr & (X86_TRAP_PF_RSVD | X86_TRAP_PF_P)) != (X86_TRAP_PF_RSVD | X86_TRAP_PF_P)) 2261 2261 TRPMSetErrorCode(pVCpu, uErr | X86_TRAP_PF_RSVD | X86_TRAP_PF_P); … … 2279 2279 DECLINLINE(int) PGM_BTH_NAME(CheckPageFaultReturnProt)(PVMCPUCC pVCpu, uint32_t uErr, RTGCPTR GCPtrPage, unsigned uPageFaultLevel) 2280 2280 { 2281 STAM_COUNTER_INC(&pVCpu->pgm.s. CTX_SUFF(pStats)->CTX_MID_Z(Stat,DirtyTrackRealPF));2281 STAM_COUNTER_INC(&pVCpu->pgm.s.Stats.CTX_MID_Z(Stat,DirtyTrackRealPF)); 2282 2282 AssertMsg(uErr & (X86_TRAP_PF_RW | X86_TRAP_PF_US | X86_TRAP_PF_ID), ("%#x\n", uErr)); 2283 2283 if ((uErr & (X86_TRAP_PF_P | X86_TRAP_PF_RSVD)) != X86_TRAP_PF_P) … … 2316 2316 if ((pPdeDst->u & (X86_PDE_P | PGM_PDFLAGS_TRACK_DIRTY)) == (X86_PDE_P | PGM_PDFLAGS_TRACK_DIRTY)) 2317 2317 { 2318 STAM_COUNTER_INC(&pVCpu->pgm.s. CTX_SUFF(pStats)->CTX_MID_Z(Stat,DirtyPageTrap));2318 STAM_COUNTER_INC(&pVCpu->pgm.s.Stats.CTX_MID_Z(Stat,DirtyPageTrap)); 2319 2319 Assert(pPdeSrc->u & X86_PDE_RW); 2320 2320 … … 2342 2342 { 2343 2343 /* Stale TLB entry. */ 2344 STAM_COUNTER_INC(&pVCpu->pgm.s. CTX_SUFF(pStats)->CTX_MID_Z(Stat,DirtyPageStale));2344 STAM_COUNTER_INC(&pVCpu->pgm.s.Stats.CTX_MID_Z(Stat,DirtyPageStale)); 2345 2345 PGM_INVL_PG(pVCpu, GCPtrPage); 2346 2346 return VINF_PGM_HANDLED_DIRTY_BIT_FAULT; /* restarts the instruction. */ … … 2380 2380 2381 2381 LogFlow(("DIRTY page trap addr=%RGv\n", GCPtrPage)); 2382 STAM_COUNTER_INC(&pVCpu->pgm.s. CTX_SUFF(pStats)->CTX_MID_Z(Stat,DirtyPageTrap));2382 STAM_COUNTER_INC(&pVCpu->pgm.s.Stats.CTX_MID_Z(Stat,DirtyPageTrap)); 2383 2383 2384 2384 Assert(PteSrc.u & X86_PTE_RW); … … 2431 2431 { 2432 2432 /* Stale TLB entry. */ 2433 STAM_COUNTER_INC(&pVCpu->pgm.s. CTX_SUFF(pStats)->CTX_MID_Z(Stat,DirtyPageStale));2433 STAM_COUNTER_INC(&pVCpu->pgm.s.Stats.CTX_MID_Z(Stat,DirtyPageStale)); 2434 2434 PGM_INVL_PG(pVCpu, GCPtrPage); 2435 2435 return VINF_PGM_HANDLED_DIRTY_BIT_FAULT; /* restarts the instruction. */ … … 2487 2487 int rc = VINF_SUCCESS; 2488 2488 2489 STAM_PROFILE_START(&pVCpu->pgm.s. CTX_SUFF(pStats)->CTX_MID_Z(Stat,SyncPT), a);2489 STAM_PROFILE_START(&pVCpu->pgm.s.Stats.CTX_MID_Z(Stat,SyncPT), a); 2490 2490 2491 2491 /* … … 2549 2549 # ifndef IN_RING3 2550 2550 Log(("SyncPT: Conflict at %RGv\n", GCPtrPage)); 2551 STAM_PROFILE_STOP(&pVCpu->pgm.s. CTX_SUFF(pStats)->CTX_MID_Z(Stat,SyncPT), a);2551 STAM_PROFILE_STOP(&pVCpu->pgm.s.Stats.CTX_MID_Z(Stat,SyncPT), a); 2552 2552 return VERR_ADDRESS_CONFLICT; 2553 2553 … … 2564 2564 if (RT_FAILURE(rc)) 2565 2565 { 2566 STAM_PROFILE_STOP(&pVCpu->pgm.s. CTX_SUFF(pStats)->CTX_MID_Z(Stat,SyncPT), a);2566 STAM_PROFILE_STOP(&pVCpu->pgm.s.Stats.CTX_MID_Z(Stat,SyncPT), a); 2567 2567 return rc; 2568 2568 } … … 2646 2646 if ((PdeSrc.u & (X86_PDE_RW | X86_PDE4M_D)) == X86_PDE_RW) 2647 2647 { 2648 STAM_COUNTER_INC(&pVCpu->pgm.s. CTX_SUFF(pStats)->CTX_MID_Z(Stat,DirtyPageBig));2648 STAM_COUNTER_INC(&pVCpu->pgm.s.Stats.CTX_MID_Z(Stat,DirtyPageBig)); 2649 2649 PdeDst.u |= PGM_PDFLAGS_TRACK_DIRTY; 2650 2650 PdeDst.u &= ~(SHWUINT)X86_PDE_RW; … … 2709 2709 * 2710 2710 */ 2711 STAM_COUNTER_INC(&pVCpu->pgm.s. CTX_SUFF(pStats)->CTX_MID_Z(Stat,SyncPT4K));2711 STAM_COUNTER_INC(&pVCpu->pgm.s.Stats.CTX_MID_Z(Stat,SyncPT4K)); 2712 2712 # ifdef PGM_SYNC_N_PAGES 2713 2713 unsigned iPTBase = (GCPtrPage >> SHW_PT_SHIFT) & SHW_PT_MASK; … … 2758 2758 * We will only sync one shadow page table at a time. 2759 2759 */ 2760 STAM_COUNTER_INC(&pVCpu->pgm.s. CTX_SUFF(pStats)->CTX_MID_Z(Stat,SyncPT4M));2760 STAM_COUNTER_INC(&pVCpu->pgm.s.Stats.CTX_MID_Z(Stat,SyncPT4M)); 2761 2761 2762 2762 /** … … 2783 2783 if ((PdeSrc.u & (X86_PDE_RW | X86_PDE4M_D)) == X86_PDE_RW) 2784 2784 { 2785 STAM_COUNTER_INC(&pVCpu->pgm.s. CTX_SUFF(pStats)->CTX_MID_Z(Stat,DirtyPageBig));2785 STAM_COUNTER_INC(&pVCpu->pgm.s.Stats.CTX_MID_Z(Stat,DirtyPageBig)); 2786 2786 PdeDst.u |= PGM_PDFLAGS_TRACK_DIRTY; 2787 2787 PdeDst.u &= ~(SHWUINT)X86_PDE_RW; … … 2909 2909 AssertRelease(!SHW_PDE_IS_P(PdeDst)); 2910 2910 2911 STAM_PROFILE_STOP(&pVCpu->pgm.s. CTX_SUFF(pStats)->CTX_MID_Z(Stat,SyncPT), a);2911 STAM_PROFILE_STOP(&pVCpu->pgm.s.Stats.CTX_MID_Z(Stat,SyncPT), a); 2912 2912 if (RT_FAILURE(rc)) 2913 STAM_COUNTER_INC(&pVCpu->pgm.s. CTX_SUFF(pStats)->CTX_MID_Z(Stat,SyncPTFailed));2913 STAM_COUNTER_INC(&pVCpu->pgm.s.Stats.CTX_MID_Z(Stat,SyncPTFailed)); 2914 2914 return rc; 2915 2915 … … 2920 2920 NOREF(iPDSrc); NOREF(pPDSrc); 2921 2921 2922 STAM_PROFILE_START(&pVCpu->pgm.s. CTX_SUFF(pStats)->CTX_MID_Z(Stat,SyncPT), a);2922 STAM_PROFILE_START(&pVCpu->pgm.s.Stats.CTX_MID_Z(Stat,SyncPT), a); 2923 2923 2924 2924 /* … … 2971 2971 if (rc != VINF_SUCCESS) 2972 2972 { 2973 STAM_PROFILE_STOP(&pVCpu->pgm.s. CTX_SUFF(pStats)->CTX_MID_Z(Stat,SyncPT), a);2973 STAM_PROFILE_STOP(&pVCpu->pgm.s.Stats.CTX_MID_Z(Stat,SyncPT), a); 2974 2974 AssertRC(rc); 2975 2975 return rc; … … 3055 3055 PGM_BTH_NAME(SyncPageWorkerTrackAddref)(pVCpu, pShwPde, PGM_PAGE_GET_TRACKING(pPage), pPage, iPDDst); 3056 3056 3057 STAM_PROFILE_STOP(&pVCpu->pgm.s. CTX_SUFF(pStats)->CTX_MID_Z(Stat,SyncPT), a);3057 STAM_PROFILE_STOP(&pVCpu->pgm.s.Stats.CTX_MID_Z(Stat,SyncPT), a); 3058 3058 return VINF_SUCCESS; 3059 3059 } … … 3079 3079 else 3080 3080 { 3081 STAM_PROFILE_STOP(&pVCpu->pgm.s. CTX_SUFF(pStats)->CTX_MID_Z(Stat,SyncPT), a);3081 STAM_PROFILE_STOP(&pVCpu->pgm.s.Stats.CTX_MID_Z(Stat,SyncPT), a); 3082 3082 AssertMsgFailedReturn(("rc=%Rrc\n", rc), RT_FAILURE_NP(rc) ? rc : VERR_IPE_UNEXPECTED_INFO_STATUS); 3083 3083 } … … 3119 3119 SHW_PDE_ATOMIC_SET2(*pPdeDst, PdeDst); 3120 3120 3121 STAM_PROFILE_STOP(&pVCpu->pgm.s. CTX_SUFF(pStats)->CTX_MID_Z(Stat,SyncPT), a);3121 STAM_PROFILE_STOP(&pVCpu->pgm.s.Stats.CTX_MID_Z(Stat,SyncPT), a); 3122 3122 if (RT_FAILURE(rc)) 3123 STAM_COUNTER_INC(&pVCpu->pgm.s. CTX_SUFF(pStats)->CTX_MID_Z(Stat,SyncPTFailed));3123 STAM_COUNTER_INC(&pVCpu->pgm.s.Stats.CTX_MID_Z(Stat,SyncPTFailed)); 3124 3124 return rc; 3125 3125 … … 3416 3416 Assert(rc != VINF_EM_RAW_GUEST_TRAP); 3417 3417 if (uErr & X86_TRAP_PF_US) 3418 STAM_COUNTER_INC(&pVCpu->pgm.s. CTX_SUFF(pStats)->CTX_MID_Z(Stat,PageOutOfSyncUser));3418 STAM_COUNTER_INC(&pVCpu->pgm.s.Stats.CTX_MID_Z(Stat,PageOutOfSyncUser)); 3419 3419 else /* supervisor */ 3420 STAM_COUNTER_INC(&pVCpu->pgm.s. CTX_SUFF(pStats)->CTX_MID_Z(Stat,PageOutOfSyncSupervisor));3420 STAM_COUNTER_INC(&pVCpu->pgm.s.Stats.CTX_MID_Z(Stat,PageOutOfSyncSupervisor)); 3421 3421 3422 3422 rc = PGM_BTH_NAME(SyncPage)(pVCpu, PdeSrc, GCPtrPage, 1, 0); -
trunk/src/VBox/VMM/VMMAll/PGMAllHandler.cpp
r90439 r91247 1138 1138 case PGMPHYSHANDLERKIND_MMIO: /* NOTE: Only use when clearing MMIO ranges with aliased MMIO2 pages! */ 1139 1139 { 1140 STAM_COUNTER_INC(&pVM->pgm.s. CTX_SUFF(pStats)->CTX_MID_Z(Stat,PhysHandlerReset)); /** @todo move out of switch */1140 STAM_COUNTER_INC(&pVM->pgm.s.Stats.CTX_MID_Z(Stat,PhysHandlerReset)); /** @todo move out of switch */ 1141 1141 PPGMRAMRANGE pRam = pgmPhysGetRange(pVM, GCPhys); 1142 1142 Assert(pRam); -
trunk/src/VBox/VMM/VMMAll/PGMAllMap.cpp
r90439 r91247 769 769 if (pPD->a[iPDE + iPT].n.u1Present /** @todo PGMGstGetPDE. */) 770 770 { 771 STAM_COUNTER_INC(&pVM->pgm.s. CTX_SUFF(pStats)->StatR3DetectedConflicts);771 STAM_COUNTER_INC(&pVM->pgm.s.Stats.StatR3DetectedConflicts); 772 772 773 773 # ifdef IN_RING3 … … 800 800 if (Pde.n.u1Present) 801 801 { 802 STAM_COUNTER_INC(&pVM->pgm.s. CTX_SUFF(pStats)->StatR3DetectedConflicts);802 STAM_COUNTER_INC(&pVM->pgm.s.Stats.StatR3DetectedConflicts); 803 803 # ifdef IN_RING3 804 804 Log(("PGMHasMappingConflicts: Conflict was detected at %RGv for mapping %s (PAE)\n" … … 861 861 if (pPD->a[iPDE + iPT].n.u1Present /** @todo PGMGstGetPDE. */) 862 862 { 863 STAM_COUNTER_INC(&pVM->pgm.s. CTX_SUFF(pStats)->StatR3DetectedConflicts);863 STAM_COUNTER_INC(&pVM->pgm.s.Stats.StatR3DetectedConflicts); 864 864 865 865 # ifdef IN_RING3 … … 900 900 if (Pde.n.u1Present) 901 901 { 902 STAM_COUNTER_INC(&pVM->pgm.s. CTX_SUFF(pStats)->StatR3DetectedConflicts);902 STAM_COUNTER_INC(&pVM->pgm.s.Stats.StatR3DetectedConflicts); 903 903 # ifdef IN_RING3 904 904 Log(("PGMHasMappingConflicts: Conflict was detected at %RGv for mapping %s (PAE)\n" -
trunk/src/VBox/VMM/VMMAll/PGMAllPhys.cpp
r91246 r91247 181 181 case OP_MOV: 182 182 pRegFrame->rip += cbOp; 183 STAM_COUNTER_INC(&pVCpu->pgm.s. CTX_SUFF(pStats)->StatRZGuestROMWriteHandled);183 STAM_COUNTER_INC(&pVCpu->pgm.s.Stats.StatRZGuestROMWriteHandled); 184 184 return VINF_SUCCESS; 185 185 } … … 205 205 } 206 206 207 STAM_COUNTER_INC(&pVCpu->pgm.s. CTX_SUFF(pStats)->StatRZGuestROMWriteUnhandled);207 STAM_COUNTER_INC(&pVCpu->pgm.s.Stats.StatRZGuestROMWriteUnhandled); 208 208 return VINF_EM_RAW_EMULATE_INSTR; 209 209 } … … 344 344 PPGMRAMRANGE pgmPhysGetRangeSlow(PVM pVM, RTGCPHYS GCPhys) 345 345 { 346 STAM_COUNTER_INC(&pVM->pgm.s. CTX_SUFF(pStats)->CTX_MID_Z(Stat,RamRangeTlbMisses));346 STAM_COUNTER_INC(&pVM->pgm.s.Stats.CTX_MID_Z(Stat,RamRangeTlbMisses)); 347 347 348 348 PPGMRAMRANGE pRam = pVM->pgm.s.CTX_SUFF(pRamRangeTree); … … 371 371 PPGMRAMRANGE pgmPhysGetRangeAtOrAboveSlow(PVM pVM, RTGCPHYS GCPhys) 372 372 { 373 STAM_COUNTER_INC(&pVM->pgm.s. CTX_SUFF(pStats)->CTX_MID_Z(Stat,RamRangeTlbMisses));373 STAM_COUNTER_INC(&pVM->pgm.s.Stats.CTX_MID_Z(Stat,RamRangeTlbMisses)); 374 374 375 375 PPGMRAMRANGE pLastLeft = NULL; … … 402 402 PPGMPAGE pgmPhysGetPageSlow(PVM pVM, RTGCPHYS GCPhys) 403 403 { 404 STAM_COUNTER_INC(&pVM->pgm.s. CTX_SUFF(pStats)->CTX_MID_Z(Stat,RamRangeTlbMisses));404 STAM_COUNTER_INC(&pVM->pgm.s.Stats.CTX_MID_Z(Stat,RamRangeTlbMisses)); 405 405 406 406 PPGMRAMRANGE pRam = pVM->pgm.s.CTX_SUFF(pRamRangeTree); … … 430 430 int pgmPhysGetPageExSlow(PVM pVM, RTGCPHYS GCPhys, PPPGMPAGE ppPage) 431 431 { 432 STAM_COUNTER_INC(&pVM->pgm.s. CTX_SUFF(pStats)->CTX_MID_Z(Stat,RamRangeTlbMisses));432 STAM_COUNTER_INC(&pVM->pgm.s.Stats.CTX_MID_Z(Stat,RamRangeTlbMisses)); 433 433 434 434 PPGMRAMRANGE pRam = pVM->pgm.s.CTX_SUFF(pRamRangeTree); … … 461 461 int pgmPhysGetPageAndRangeExSlow(PVM pVM, RTGCPHYS GCPhys, PPPGMPAGE ppPage, PPGMRAMRANGE *ppRam) 462 462 { 463 STAM_COUNTER_INC(&pVM->pgm.s. CTX_SUFF(pStats)->CTX_MID_Z(Stat,RamRangeTlbMisses));463 STAM_COUNTER_INC(&pVM->pgm.s.Stats.CTX_MID_Z(Stat,RamRangeTlbMisses)); 464 464 465 465 PPGMRAMRANGE pRam = pVM->pgm.s.CTX_SUFF(pRamRangeTree); … … 566 566 { 567 567 PGM_LOCK_VOID(pVM); 568 STAM_COUNTER_INC(&pVM->pgm.s. CTX_SUFF(pStats)->StatPageMapTlbFlushes);568 STAM_COUNTER_INC(&pVM->pgm.s.Stats.StatPageMapTlbFlushes); 569 569 570 570 /* Clear the R3 & R0 TLBs completely. */ … … 598 598 PGM_LOCK_ASSERT_OWNER(pVM); 599 599 600 STAM_COUNTER_INC(&pVM->pgm.s. CTX_SUFF(pStats)->StatPageMapTlbFlushEntry);600 STAM_COUNTER_INC(&pVM->pgm.s.Stats.StatPageMapTlbFlushEntry); 601 601 602 602 unsigned const idx = PGM_PAGER3MAPTLB_IDX(GCPhys); … … 807 807 Log(("PGM: Replaced shared page %#x at %RGp with %#x / %RHp\n", PGM_PAGE_GET_PAGEID(pPage), 808 808 GCPhys, pVM->pgm.s.aHandyPages[iHandyPage].idPage, HCPhys)); 809 STAM_COUNTER_INC(&pVM->pgm.s. CTX_SUFF(pStats)->CTX_MID_Z(Stat,PageReplaceShared));809 STAM_COUNTER_INC(&pVM->pgm.s.Stats.CTX_MID_Z(Stat,PageReplaceShared)); 810 810 pVM->pgm.s.cSharedPages--; 811 811 … … 817 817 { 818 818 Log2(("PGM: Replaced zero page %RGp with %#x / %RHp\n", GCPhys, pVM->pgm.s.aHandyPages[iHandyPage].idPage, HCPhys)); 819 STAM_COUNTER_INC(&pVM->pgm.s. CTX_SUFF(pStats)->StatRZPageReplaceZero);819 STAM_COUNTER_INC(&pVM->pgm.s.Stats.StatRZPageReplaceZero); 820 820 pVM->pgm.s.cZeroPages--; 821 821 } … … 998 998 } 999 999 1000 STAM_PROFILE_START(&pVM->pgm.s. CTX_SUFF(pStats)->CTX_MID_Z(Stat,IsValidLargePage), a);1000 STAM_PROFILE_START(&pVM->pgm.s.Stats.CTX_MID_Z(Stat,IsValidLargePage), a); 1001 1001 /* Check all remaining pages in the 2 MB range. */ 1002 1002 unsigned i; … … 1019 1019 GCPhys += PAGE_SIZE; 1020 1020 } 1021 STAM_PROFILE_STOP(&pVM->pgm.s. CTX_SUFF(pStats)->CTX_MID_Z(Stat,IsValidLargePage), a);1021 STAM_PROFILE_STOP(&pVM->pgm.s.Stats.CTX_MID_Z(Stat,IsValidLargePage), a); 1022 1022 1023 1023 if (i == _2M/PAGE_SIZE) … … 1160 1160 if (pTlbe->idChunk == idChunk) 1161 1161 { 1162 STAM_COUNTER_INC(&pVM->pgm.s. CTX_SUFF(pStats)->CTX_MID_Z(Stat,ChunkR3MapTlbHits));1162 STAM_COUNTER_INC(&pVM->pgm.s.Stats.CTX_MID_Z(Stat,ChunkR3MapTlbHits)); 1163 1163 pMap = pTlbe->pChunk; 1164 1164 } 1165 1165 else 1166 1166 { 1167 STAM_COUNTER_INC(&pVM->pgm.s. CTX_SUFF(pStats)->CTX_MID_Z(Stat,ChunkR3MapTlbMisses));1167 STAM_COUNTER_INC(&pVM->pgm.s.Stats.CTX_MID_Z(Stat,ChunkR3MapTlbMisses)); 1168 1168 1169 1169 /* … … 1285 1285 if (pTlbe->idChunk == idChunk) 1286 1286 { 1287 STAM_COUNTER_INC(&pVM->pgm.s. CTX_SUFF(pStats)->CTX_MID_Z(Stat,ChunkR3MapTlbHits));1287 STAM_COUNTER_INC(&pVM->pgm.s.Stats.CTX_MID_Z(Stat,ChunkR3MapTlbHits)); 1288 1288 pMap = pTlbe->pChunk; 1289 1289 AssertPtr(pMap->pv); … … 1291 1291 else 1292 1292 { 1293 STAM_COUNTER_INC(&pVM->pgm.s. CTX_SUFF(pStats)->CTX_MID_Z(Stat,ChunkR3MapTlbMisses));1293 STAM_COUNTER_INC(&pVM->pgm.s.Stats.CTX_MID_Z(Stat,ChunkR3MapTlbMisses)); 1294 1294 1295 1295 /* … … 1435 1435 if (!pPage) 1436 1436 { 1437 STAM_COUNTER_INC(&pVM->pgm.s. CTX_SUFF(pStats)->CTX_MID_Z(Stat,PageMapTlbMisses));1437 STAM_COUNTER_INC(&pVM->pgm.s.Stats.CTX_MID_Z(Stat,PageMapTlbMisses)); 1438 1438 return VERR_PGM_INVALID_GC_PHYSICAL_ADDRESS; 1439 1439 } … … 1458 1458 { 1459 1459 PGM_LOCK_ASSERT_OWNER(pVM); 1460 STAM_COUNTER_INC(&pVM->pgm.s. CTX_SUFF(pStats)->CTX_MID_Z(Stat,PageMapTlbMisses));1460 STAM_COUNTER_INC(&pVM->pgm.s.Stats.CTX_MID_Z(Stat,PageMapTlbMisses)); 1461 1461 1462 1462 /* … … 2375 2375 LogFlow(("PGMPhysRead: %RGp %d\n", GCPhys, cbRead)); 2376 2376 2377 STAM_COUNTER_INC(&pVM->pgm.s. CTX_SUFF(pStats)->CTX_MID_Z(Stat,PhysRead));2378 STAM_COUNTER_ADD(&pVM->pgm.s. CTX_SUFF(pStats)->CTX_MID_Z(Stat,PhysReadBytes), cbRead);2377 STAM_COUNTER_INC(&pVM->pgm.s.Stats.CTX_MID_Z(Stat,PhysRead)); 2378 STAM_COUNTER_ADD(&pVM->pgm.s.Stats.CTX_MID_Z(Stat,PhysReadBytes), cbRead); 2379 2379 2380 2380 PGM_LOCK_VOID(pVM); … … 2761 2761 LogFlow(("PGMPhysWrite: %RGp %d\n", GCPhys, cbWrite)); 2762 2762 2763 STAM_COUNTER_INC(&pVM->pgm.s. CTX_SUFF(pStats)->CTX_MID_Z(Stat,PhysWrite));2764 STAM_COUNTER_ADD(&pVM->pgm.s. CTX_SUFF(pStats)->CTX_MID_Z(Stat,PhysWriteBytes), cbWrite);2763 STAM_COUNTER_INC(&pVM->pgm.s.Stats.CTX_MID_Z(Stat,PhysWrite)); 2764 STAM_COUNTER_ADD(&pVM->pgm.s.Stats.CTX_MID_Z(Stat,PhysWriteBytes), cbWrite); 2765 2765 2766 2766 PGM_LOCK_VOID(pVM); … … 3029 3029 return VINF_SUCCESS; 3030 3030 3031 STAM_COUNTER_INC(&pVM->pgm.s. CTX_SUFF(pStats)->CTX_MID_Z(Stat,PhysSimpleRead));3032 STAM_COUNTER_ADD(&pVM->pgm.s. CTX_SUFF(pStats)->CTX_MID_Z(Stat,PhysSimpleReadBytes), cb);3031 STAM_COUNTER_INC(&pVM->pgm.s.Stats.CTX_MID_Z(Stat,PhysSimpleRead)); 3032 STAM_COUNTER_ADD(&pVM->pgm.s.Stats.CTX_MID_Z(Stat,PhysSimpleReadBytes), cb); 3033 3033 3034 3034 /* Take the PGM lock here, because many called functions take the lock for a very short period. That's counter-productive … … 3120 3120 return VINF_SUCCESS; 3121 3121 3122 STAM_COUNTER_INC(&pVM->pgm.s. CTX_SUFF(pStats)->CTX_MID_Z(Stat,PhysSimpleWrite));3123 STAM_COUNTER_ADD(&pVM->pgm.s. CTX_SUFF(pStats)->CTX_MID_Z(Stat,PhysSimpleWriteBytes), cb);3122 STAM_COUNTER_INC(&pVM->pgm.s.Stats.CTX_MID_Z(Stat,PhysSimpleWrite)); 3123 STAM_COUNTER_ADD(&pVM->pgm.s.Stats.CTX_MID_Z(Stat,PhysSimpleWriteBytes), cb); 3124 3124 3125 3125 /* map the 1st page */ -
trunk/src/VBox/VMM/VMMAll/PGMAllPool.cpp
r91243 r91247 3964 3964 paPhysExts[iPhysExt].aidx[1] = iShwPT; 3965 3965 paPhysExts[iPhysExt].apte[1] = iPte; 3966 STAM_COUNTER_INC(&pVM->pgm.s. CTX_SUFF(pStats)->StatTrackAliasedMany);3966 STAM_COUNTER_INC(&pVM->pgm.s.Stats.StatTrackAliasedMany); 3967 3967 LogFlow(("pgmPoolTrackPhysExtInsert: %d:{,%d pte %d,}\n", iPhysExt, iShwPT, iPte)); 3968 3968 return PGMPOOL_TD_MAKE(PGMPOOL_TD_CREFS_PHYSEXT, iPhysExt); … … 3972 3972 paPhysExts[iPhysExt].aidx[2] = iShwPT; 3973 3973 paPhysExts[iPhysExt].apte[2] = iPte; 3974 STAM_COUNTER_INC(&pVM->pgm.s. CTX_SUFF(pStats)->StatTrackAliasedMany);3974 STAM_COUNTER_INC(&pVM->pgm.s.Stats.StatTrackAliasedMany); 3975 3975 LogFlow(("pgmPoolTrackPhysExtInsert: %d:{,,%d pte %d}\n", iPhysExt, iShwPT, iPte)); 3976 3976 return PGMPOOL_TD_MAKE(PGMPOOL_TD_CREFS_PHYSEXT, iPhysExt); … … 3991 3991 paPhysExts[iPhysExt].aidx[i] = iShwPT; 3992 3992 paPhysExts[iPhysExt].apte[i] = iPte; 3993 STAM_COUNTER_INC(&pVM->pgm.s. CTX_SUFF(pStats)->StatTrackAliasedMany);3993 STAM_COUNTER_INC(&pVM->pgm.s.Stats.StatTrackAliasedMany); 3994 3994 LogFlow(("pgmPoolTrackPhysExtInsert: %d:{%d pte %d} i=%d cMax=%d\n", iPhysExt, iShwPT, iPte, i, cMax)); 3995 3995 return PGMPOOL_TD_MAKE(PGMPOOL_TD_CREFS_PHYSEXT, iPhysExtStart); … … 3997 3997 if (!--cMax) 3998 3998 { 3999 STAM_COUNTER_INC(&pVM->pgm.s. CTX_SUFF(pStats)->StatTrackOverflows);3999 STAM_COUNTER_INC(&pVM->pgm.s.Stats.StatTrackOverflows); 4000 4000 pgmPoolTrackPhysExtFreeList(pVM, iPhysExtStart); 4001 4001 LogFlow(("pgmPoolTrackPhysExtInsert: overflow (1) iShwPT=%d\n", iShwPT)); … … 4015 4015 if (!pNew) 4016 4016 { 4017 STAM_COUNTER_INC(&pVM->pgm.s. CTX_SUFF(pStats)->StatTrackNoExtentsLeft);4017 STAM_COUNTER_INC(&pVM->pgm.s.Stats.StatTrackNoExtentsLeft); 4018 4018 pgmPoolTrackPhysExtFreeList(pVM, iPhysExtStart); 4019 4019 LogFlow(("pgmPoolTrackPhysExtInsert: pgmPoolTrackPhysExtAlloc failed iShwPT=%d\n", iShwPT)); … … 4053 4053 { 4054 4054 LogFlow(("pgmPoolTrackPhysExtAddref: new extent: %d:{%d, %d}\n", iPhysExt, PGMPOOL_TD_GET_IDX(u16), iShwPT)); 4055 STAM_COUNTER_INC(&pVM->pgm.s. CTX_SUFF(pStats)->StatTrackAliased);4055 STAM_COUNTER_INC(&pVM->pgm.s.Stats.StatTrackAliased); 4056 4056 pPhysExt->aidx[0] = PGMPOOL_TD_GET_IDX(u16); 4057 4057 pPhysExt->apte[0] = PGM_PAGE_GET_PTE_INDEX(pPhysPage); … … 4071 4071 } 4072 4072 else 4073 STAM_COUNTER_INC(&pVM->pgm.s. CTX_SUFF(pStats)->StatTrackAliasedLots);4073 STAM_COUNTER_INC(&pVM->pgm.s.Stats.StatTrackAliasedLots); 4074 4074 PGM_UNLOCK(pVM); 4075 4075 return u16; -
trunk/src/VBox/VMM/VMMR0/PGMR0.cpp
r91016 r91247 617 617 { 618 618 if (uErr & X86_TRAP_PF_RW) 619 STAM_COUNTER_INC(&pGVCpu->pgm.s. CTX_SUFF(pStats)->StatRZTrap0eUSNotPresentWrite);619 STAM_COUNTER_INC(&pGVCpu->pgm.s.Stats.StatRZTrap0eUSNotPresentWrite); 620 620 else 621 STAM_COUNTER_INC(&pGVCpu->pgm.s. CTX_SUFF(pStats)->StatRZTrap0eUSNotPresentRead);621 STAM_COUNTER_INC(&pGVCpu->pgm.s.Stats.StatRZTrap0eUSNotPresentRead); 622 622 } 623 623 else if (uErr & X86_TRAP_PF_RW) 624 STAM_COUNTER_INC(&pGVCpu->pgm.s. CTX_SUFF(pStats)->StatRZTrap0eUSWrite);624 STAM_COUNTER_INC(&pGVCpu->pgm.s.Stats.StatRZTrap0eUSWrite); 625 625 else if (uErr & X86_TRAP_PF_RSVD) 626 STAM_COUNTER_INC(&pGVCpu->pgm.s. CTX_SUFF(pStats)->StatRZTrap0eUSReserved);626 STAM_COUNTER_INC(&pGVCpu->pgm.s.Stats.StatRZTrap0eUSReserved); 627 627 else if (uErr & X86_TRAP_PF_ID) 628 STAM_COUNTER_INC(&pGVCpu->pgm.s. CTX_SUFF(pStats)->StatRZTrap0eUSNXE);628 STAM_COUNTER_INC(&pGVCpu->pgm.s.Stats.StatRZTrap0eUSNXE); 629 629 else 630 STAM_COUNTER_INC(&pGVCpu->pgm.s. CTX_SUFF(pStats)->StatRZTrap0eUSRead);630 STAM_COUNTER_INC(&pGVCpu->pgm.s.Stats.StatRZTrap0eUSRead); 631 631 } 632 632 else … … 635 635 { 636 636 if (uErr & X86_TRAP_PF_RW) 637 STAM_COUNTER_INC(&pGVCpu->pgm.s. CTX_SUFF(pStats)->StatRZTrap0eSVNotPresentWrite);637 STAM_COUNTER_INC(&pGVCpu->pgm.s.Stats.StatRZTrap0eSVNotPresentWrite); 638 638 else 639 STAM_COUNTER_INC(&pGVCpu->pgm.s. CTX_SUFF(pStats)->StatRZTrap0eSVNotPresentRead);639 STAM_COUNTER_INC(&pGVCpu->pgm.s.Stats.StatRZTrap0eSVNotPresentRead); 640 640 } 641 641 else if (uErr & X86_TRAP_PF_RW) 642 STAM_COUNTER_INC(&pGVCpu->pgm.s. CTX_SUFF(pStats)->StatRZTrap0eSVWrite);642 STAM_COUNTER_INC(&pGVCpu->pgm.s.Stats.StatRZTrap0eSVWrite); 643 643 else if (uErr & X86_TRAP_PF_ID) 644 STAM_COUNTER_INC(&pGVCpu->pgm.s. CTX_SUFF(pStats)->StatRZTrap0eSNXE);644 STAM_COUNTER_INC(&pGVCpu->pgm.s.Stats.StatRZTrap0eSNXE); 645 645 else if (uErr & X86_TRAP_PF_RSVD) 646 STAM_COUNTER_INC(&pGVCpu->pgm.s. CTX_SUFF(pStats)->StatRZTrap0eSVReserved);646 STAM_COUNTER_INC(&pGVCpu->pgm.s.Stats.StatRZTrap0eSVReserved); 647 647 } 648 648 #endif … … 701 701 702 702 STAM_STATS({ if (!pGVCpu->pgm.s.CTX_SUFF(pStatTrap0eAttribution)) 703 pGVCpu->pgm.s.CTX_SUFF(pStatTrap0eAttribution) = &pGVCpu->pgm.s. CTX_SUFF(pStats)->StatRZTrap0eTime2Misc; });704 STAM_PROFILE_STOP_EX(&pGVCpu->pgm.s. CTX_SUFF(pStats)->StatRZTrap0e, pGVCpu->pgm.s.CTX_SUFF(pStatTrap0eAttribution), a);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); 705 705 return rc; 706 706 } … … 749 749 { 750 750 Log(("PGMR0Trap0eHandlerNPMisconfig: Resyncing aliases / tmp-off page at %RGp (uErr=%#x) %R[pgmpage]\n", GCPhysFault, uErr, pPage)); 751 STAM_COUNTER_INC(&pGVCpu->pgm.s. CTX_SUFF(pStats)->StatR0NpMiscfgSyncPage);751 STAM_COUNTER_INC(&pGVCpu->pgm.s.Stats.StatR0NpMiscfgSyncPage); 752 752 rc = pgmShwSyncNestedPageLocked(pGVCpu, GCPhysFault, 1 /*cPages*/, enmShwPagingMode); 753 753 PGM_UNLOCK(pGVM); … … 790 790 */ 791 791 Log(("PGMR0Trap0eHandlerNPMisconfig: Out of sync page at %RGp (uErr=%#x)\n", GCPhysFault, uErr)); 792 STAM_COUNTER_INC(&pGVCpu->pgm.s. CTX_SUFF(pStats)->StatR0NpMiscfgSyncPage);792 STAM_COUNTER_INC(&pGVCpu->pgm.s.Stats.StatR0NpMiscfgSyncPage); 793 793 rc = pgmShwSyncNestedPageLocked(pGVCpu, GCPhysFault, 1 /*cPages*/, enmShwPagingMode); 794 794 PGM_UNLOCK(pGVM); 795 795 } 796 796 797 STAM_PROFILE_STOP(&pGVCpu->pgm.s. CTX_SUFF(pStats)->StatR0NpMiscfg, a);797 STAM_PROFILE_STOP(&pGVCpu->pgm.s.Stats.StatR0NpMiscfg, a); 798 798 return rc; 799 799 -
trunk/src/VBox/VMM/VMMR3/PGM.cpp
r91246 r91247 874 874 rc = CFGMR3QueryBoolDef(pCfgPGM, "ZeroRamPagesOnReset", &pVM->pgm.s.fZeroRamPagesOnReset, true); 875 875 AssertLogRelRCReturn(rc, rc); 876 877 #ifdef VBOX_WITH_STATISTICS878 /*879 * Allocate memory for the statistics before someone tries to use them.880 */881 size_t cbTotalStats = RT_ALIGN_Z(sizeof(PGMSTATS), 64) + RT_ALIGN_Z(sizeof(PGMCPUSTATS), 64) * pVM->cCpus;882 void *pv;883 rc = MMHyperAlloc(pVM, RT_ALIGN_Z(cbTotalStats, PAGE_SIZE), PAGE_SIZE, MM_TAG_PGM, &pv);884 AssertRCReturn(rc, rc);885 886 pVM->pgm.s.pStatsR3 = (PGMSTATS *)pv;887 pVM->pgm.s.pStatsR0 = MMHyperCCToR0(pVM, pv);888 pv = (uint8_t *)pv + RT_ALIGN_Z(sizeof(PGMSTATS), 64);889 890 for (VMCPUID idCpu = 0; idCpu < pVM->cCpus; idCpu++)891 {892 PVMCPU pVCpu = pVM->apCpusR3[idCpu];893 pVCpu->pgm.s.pStatsR3 = (PGMCPUSTATS *)pv;894 pVCpu->pgm.s.pStatsR0 = MMHyperCCToR0(pVM, pv);895 896 pv = (uint8_t *)pv + RT_ALIGN_Z(sizeof(PGMCPUSTATS), 64);897 }898 #endif /* VBOX_WITH_STATISTICS */899 876 900 877 /* … … 1308 1285 AssertRC(rc); 1309 1286 1310 PGMSTATS *pStats = pVM->pgm.s.pStatsR3;1287 PGMSTATS *pStats = &pVM->pgm.s.Stats; 1311 1288 1312 1289 PGM_REG_PROFILE(&pStats->StatAllocLargePage, "/PGM/LargePage/Alloc", "Time spent by the host OS for large page allocation."); … … 1418 1395 1419 1396 #ifdef VBOX_WITH_STATISTICS 1420 PGMCPUSTATS *pCpuStats = pVM->apCpusR3[idCpu]->pgm.s.pStatsR3;1397 PGMCPUSTATS *pCpuStats = &pVM->apCpusR3[idCpu]->pgm.s.Stats; 1421 1398 1422 1399 # if 0 /* rarely useful; leave for debugging. */ -
trunk/src/VBox/VMM/VMMR3/PGMMap.cpp
r90439 r91247 1171 1171 { 1172 1172 STAM_REL_COUNTER_INC(&pVM->pgm.s.cRelocations); 1173 STAM_PROFILE_START(&pVM->pgm.s. CTX_SUFF(pStats)->StatR3ResolveConflict, a);1173 STAM_PROFILE_START(&pVM->pgm.s.Stats.StatR3ResolveConflict, a); 1174 1174 1175 1175 /* Raw mode only which implies one VCPU. */ … … 1224 1224 { 1225 1225 pgmR3MapRelocate(pVM, pMapping, GCPtrOldMapping, GCPtrNewMapping); 1226 STAM_PROFILE_STOP(&pVM->pgm.s. CTX_SUFF(pStats)->StatR3ResolveConflict, a);1226 STAM_PROFILE_STOP(&pVM->pgm.s.Stats.StatR3ResolveConflict, a); 1227 1227 return VINF_SUCCESS; 1228 1228 } 1229 1229 } 1230 1230 1231 STAM_PROFILE_STOP(&pVM->pgm.s. CTX_SUFF(pStats)->StatR3ResolveConflict, a);1231 STAM_PROFILE_STOP(&pVM->pgm.s.Stats.StatR3ResolveConflict, a); 1232 1232 # ifdef DEBUG_bird 1233 1233 /* … … 1332 1332 { 1333 1333 pgmR3MapRelocate(pVM, pMapping, GCPtrOldMapping, GCPtrNewMapping); 1334 STAM_PROFILE_STOP(&pVM->pgm.s. CTX_SUFF(pStats)->StatR3ResolveConflict, a);1334 STAM_PROFILE_STOP(&pVM->pgm.s.Stats.StatR3ResolveConflict, a); 1335 1335 return VINF_SUCCESS; 1336 1336 } 1337 1337 } 1338 1338 } 1339 STAM_PROFILE_STOP(&pVM->pgm.s. CTX_SUFF(pStats)->StatR3ResolveConflict, a);1339 STAM_PROFILE_STOP(&pVM->pgm.s.Stats.StatR3ResolveConflict, a); 1340 1340 AssertMsgFailed(("Failed to relocate page table mapping '%s' from %#x! (cPTs=%d)\n", pMapping->pszDesc, GCPtrOldMapping, pMapping->cb >> X86_PD_PAE_SHIFT)); 1341 1341 return VERR_PGM_NO_HYPERVISOR_ADDRESS; -
trunk/src/VBox/VMM/VMMR3/PGMPhys.cpp
r91246 r91247 4665 4665 * Enumerate the age tree starting with the left most node. 4666 4666 */ 4667 STAM_PROFILE_START(&pVM->pgm.s. CTX_SUFF(pStats)->StatChunkFindCandidate, a);4667 STAM_PROFILE_START(&pVM->pgm.s.Stats.StatChunkFindCandidate, a); 4668 4668 PGMR3PHYSCHUNKUNMAPCB Args; 4669 4669 Args.pVM = pVM; … … 4675 4675 Assert(Args.pChunk->cRefs == 0); 4676 4676 Assert(Args.pChunk->cPermRefs == 0); 4677 STAM_PROFILE_STOP(&pVM->pgm.s. CTX_SUFF(pStats)->StatChunkFindCandidate, a);4677 STAM_PROFILE_STOP(&pVM->pgm.s.Stats.StatChunkFindCandidate, a); 4678 4678 return Args.pChunk->Core.Key; 4679 4679 } 4680 4680 4681 STAM_PROFILE_STOP(&pVM->pgm.s. CTX_SUFF(pStats)->StatChunkFindCandidate, a);4681 STAM_PROFILE_STOP(&pVM->pgm.s.Stats.StatChunkFindCandidate, a); 4682 4682 return INT32_MAX; 4683 4683 } … … 4720 4720 if (Req.idChunkUnmap != INT32_MAX) 4721 4721 { 4722 STAM_PROFILE_START(&pVM->pgm.s. CTX_SUFF(pStats)->StatChunkUnmap, a);4722 STAM_PROFILE_START(&pVM->pgm.s.Stats.StatChunkUnmap, a); 4723 4723 rc = VMMR3CallR0(pVM, VMMR0_DO_GMM_MAP_UNMAP_CHUNK, 0, &Req.Hdr); 4724 STAM_PROFILE_STOP(&pVM->pgm.s. CTX_SUFF(pStats)->StatChunkUnmap, a);4724 STAM_PROFILE_STOP(&pVM->pgm.s.Stats.StatChunkUnmap, a); 4725 4725 if (RT_SUCCESS(rc)) 4726 4726 { … … 4829 4829 4830 4830 /* Must be callable from any thread, so can't use VMMR3CallR0. */ 4831 STAM_PROFILE_START(&pVM->pgm.s. CTX_SUFF(pStats)->StatChunkMap, a);4831 STAM_PROFILE_START(&pVM->pgm.s.Stats.StatChunkMap, a); 4832 4832 rc = SUPR3CallVMMR0Ex(VMCC_GET_VMR0_FOR_CALL(pVM), NIL_VMCPUID, VMMR0_DO_GMM_MAP_UNMAP_CHUNK, 0, &Req.Hdr); 4833 STAM_PROFILE_STOP(&pVM->pgm.s. CTX_SUFF(pStats)->StatChunkMap, a);4833 STAM_PROFILE_STOP(&pVM->pgm.s.Stats.StatChunkMap, a); 4834 4834 if (RT_SUCCESS(rc)) 4835 4835 { … … 4935 4935 PGM_LOCK_VOID(pVM); 4936 4936 4937 STAM_PROFILE_START(&pVM->pgm.s. CTX_SUFF(pStats)->StatAllocLargePage, a);4937 STAM_PROFILE_START(&pVM->pgm.s.Stats.StatAllocLargePage, a); 4938 4938 uint64_t const msAllocStart = RTTimeMilliTS(); 4939 4939 int rc = VMMR3CallR0(pVM, VMMR0_DO_PGM_ALLOCATE_LARGE_HANDY_PAGE, 0, NULL); 4940 4940 uint64_t const cMsElapsed = RTTimeMilliTS() - msAllocStart; 4941 STAM_PROFILE_STOP(&pVM->pgm.s. CTX_SUFF(pStats)->StatAllocLargePage, a);4941 STAM_PROFILE_STOP(&pVM->pgm.s.Stats.StatAllocLargePage, a); 4942 4942 if (RT_SUCCESS(rc)) 4943 4943 { … … 4964 4964 * Clear the pages. 4965 4965 */ 4966 STAM_PROFILE_START(&pVM->pgm.s. CTX_SUFF(pStats)->StatClearLargePage, b);4966 STAM_PROFILE_START(&pVM->pgm.s.Stats.StatClearLargePage, b); 4967 4967 for (unsigned i = 0; i < _2M/PAGE_SIZE; i++) 4968 4968 { … … 4974 4974 4975 4975 Assert(PGM_PAGE_IS_ZERO(pPage)); 4976 STAM_COUNTER_INC(&pVM->pgm.s. CTX_SUFF(pStats)->StatRZPageReplaceZero);4976 STAM_COUNTER_INC(&pVM->pgm.s.Stats.StatRZPageReplaceZero); 4977 4977 pVM->pgm.s.cZeroPages--; 4978 4978 … … 4998 4998 Log3(("PGMR3PhysAllocateLargePage: idPage=%#x HCPhys=%RGp\n", idPage, HCPhys)); 4999 4999 } 5000 STAM_PROFILE_STOP(&pVM->pgm.s. CTX_SUFF(pStats)->StatClearLargePage, b);5000 STAM_PROFILE_STOP(&pVM->pgm.s.Stats.StatClearLargePage, b); 5001 5001 5002 5002 /* Flush all TLBs. */ … … 5012 5012 if (cMsElapsed > 100) 5013 5013 { 5014 STAM_COUNTER_INC(&pVM->pgm.s. CTX_SUFF(pStats)->StatLargePageOverflow);5014 STAM_COUNTER_INC(&pVM->pgm.s.Stats.StatLargePageOverflow); 5015 5015 if ( ++cTimeOut > 10 5016 5016 || cMsElapsed > 1000 /* more than one second forces an early retirement from allocating large pages. */) -
trunk/src/VBox/VMM/include/PGMInline.h
r91014 r91247 64 64 if (!pRam || GCPhys - pRam->GCPhys >= pRam->cb) 65 65 return pgmPhysGetRangeSlow(pVM, GCPhys); 66 STAM_COUNTER_INC(&pVM->pgm.s. CTX_SUFF(pStats)->CTX_MID_Z(Stat,RamRangeTlbHits));66 STAM_COUNTER_INC(&pVM->pgm.s.Stats.CTX_MID_Z(Stat,RamRangeTlbHits)); 67 67 return pRam; 68 68 } … … 85 85 || (GCPhys - pRam->GCPhys) >= pRam->cb) 86 86 return pgmPhysGetRangeAtOrAboveSlow(pVM, GCPhys); 87 STAM_COUNTER_INC(&pVM->pgm.s. CTX_SUFF(pStats)->CTX_MID_Z(Stat,RamRangeTlbHits));87 STAM_COUNTER_INC(&pVM->pgm.s.Stats.CTX_MID_Z(Stat,RamRangeTlbHits)); 88 88 return pRam; 89 89 } … … 106 106 || (off = GCPhys - pRam->GCPhys) >= pRam->cb) 107 107 return pgmPhysGetPageSlow(pVM, GCPhys); 108 STAM_COUNTER_INC(&pVM->pgm.s. CTX_SUFF(pStats)->CTX_MID_Z(Stat,RamRangeTlbHits));108 STAM_COUNTER_INC(&pVM->pgm.s.Stats.CTX_MID_Z(Stat,RamRangeTlbHits)); 109 109 return &pRam->aPages[off >> PAGE_SHIFT]; 110 110 } … … 132 132 return pgmPhysGetPageExSlow(pVM, GCPhys, ppPage); 133 133 *ppPage = &pRam->aPages[off >> PAGE_SHIFT]; 134 STAM_COUNTER_INC(&pVM->pgm.s. CTX_SUFF(pStats)->CTX_MID_Z(Stat,RamRangeTlbHits));134 STAM_COUNTER_INC(&pVM->pgm.s.Stats.CTX_MID_Z(Stat,RamRangeTlbHits)); 135 135 return VINF_SUCCESS; 136 136 } … … 164 164 return pgmPhysGetPageAndRangeExSlow(pVM, GCPhys, ppPage, ppRamHint); 165 165 166 STAM_COUNTER_INC(&pVM->pgm.s. CTX_SUFF(pStats)->CTX_MID_Z(Stat,RamRangeTlbHits));166 STAM_COUNTER_INC(&pVM->pgm.s.Stats.CTX_MID_Z(Stat,RamRangeTlbHits)); 167 167 *ppRamHint = pRam; 168 168 } … … 191 191 return pgmPhysGetPageAndRangeExSlow(pVM, GCPhys, ppPage, ppRam); 192 192 193 STAM_COUNTER_INC(&pVM->pgm.s. CTX_SUFF(pStats)->CTX_MID_Z(Stat,RamRangeTlbHits));193 STAM_COUNTER_INC(&pVM->pgm.s.Stats.CTX_MID_Z(Stat,RamRangeTlbHits)); 194 194 *ppRam = pRam; 195 195 *ppPage = &pRam->aPages[off >> PAGE_SHIFT]; … … 238 238 if (pTlbe->GCPhys == (GCPhys & X86_PTE_PAE_PG_MASK)) 239 239 { 240 STAM_COUNTER_INC(&pVM->pgm.s. CTX_SUFF(pStats)->CTX_MID_Z(Stat,PageMapTlbHits));240 STAM_COUNTER_INC(&pVM->pgm.s.Stats.CTX_MID_Z(Stat,PageMapTlbHits)); 241 241 rc = VINF_SUCCESS; 242 242 } … … 268 268 if (pTlbe->GCPhys == (GCPhys & X86_PTE_PAE_PG_MASK)) 269 269 { 270 STAM_COUNTER_INC(&pVM->pgm.s. CTX_SUFF(pStats)->CTX_MID_Z(Stat,PageMapTlbHits));270 STAM_COUNTER_INC(&pVM->pgm.s.Stats.CTX_MID_Z(Stat,PageMapTlbHits)); 271 271 rc = VINF_SUCCESS; 272 272 AssertPtr(pTlbe->pv); … … 916 916 && GCPhys < pHandler->Core.KeyLast) 917 917 { 918 STAM_COUNTER_INC(&pVM->pgm.s. CTX_SUFF(pStats)->CTX_MID_Z(Stat,PhysHandlerLookupHits));918 STAM_COUNTER_INC(&pVM->pgm.s.Stats.CTX_MID_Z(Stat,PhysHandlerLookupHits)); 919 919 return pHandler; 920 920 } 921 921 922 STAM_COUNTER_INC(&pVM->pgm.s. CTX_SUFF(pStats)->CTX_MID_Z(Stat,PhysHandlerLookupMisses));922 STAM_COUNTER_INC(&pVM->pgm.s.Stats.CTX_MID_Z(Stat,PhysHandlerLookupMisses)); 923 923 pHandler = (PPGMPHYSHANDLER)RTAvlroGCPhysRangeGet(&pVM->pgm.s.CTX_SUFF(pTrees)->PhysHandlers, GCPhys); 924 924 if (pHandler) -
trunk/src/VBox/VMM/include/PGMInternal.h
r91016 r91247 2818 2818 /** 2819 2819 * PGM statistics. 2820 *2821 * These lives on the heap when compiled in as they would otherwise waste2822 * unnecessary space in release builds.2823 2820 */ 2824 2821 typedef struct PGMSTATS … … 2895 2892 2896 2893 /** Time spent by the host OS for large page allocation. */ 2897 STAMPROFILE 2894 STAMPROFILE StatAllocLargePage; 2898 2895 /** Time spent clearing the newly allocated large pages. */ 2899 STAMPROFILE 2896 STAMPROFILE StatClearLargePage; 2900 2897 /** The number of times allocating a large pages takes more than the allowed period. */ 2901 STAMCOUNTER 2898 STAMCOUNTER StatLargePageOverflow; 2902 2899 /** pgmPhysIsValidLargePage profiling - R3 */ 2903 STAMPROFILE 2900 STAMPROFILE StatR3IsValidLargePage; 2904 2901 /** pgmPhysIsValidLargePage profiling - RZ*/ 2905 STAMPROFILE 2906 2907 STAMPROFILE 2908 STAMPROFILE 2909 STAMPROFILE 2910 STAMPROFILE 2902 STAMPROFILE StatRZIsValidLargePage; 2903 2904 STAMPROFILE StatChunkAging; 2905 STAMPROFILE StatChunkFindCandidate; 2906 STAMPROFILE StatChunkUnmap; 2907 STAMPROFILE StatChunkMap; 2911 2908 } PGMSTATS; 2912 2909 #endif /* VBOX_WITH_STATISTICS */ … … 3284 3281 /** @} */ 3285 3282 3286 #ifdef VBOX_WITH_STATISTICS 3287 /** @name Statistics on the heap. 3288 * @{ */ 3289 R3PTRTYPE(PGMSTATS *) pStatsR3; 3290 R0PTRTYPE(PGMSTATS *) pStatsR0; 3291 /** @} */ 3292 #endif 3283 /** These are optional statistics that used to be on the hyper heap. */ 3284 PGMSTATS Stats; 3293 3285 } PGM; 3294 3286 #ifndef IN_TSTVMSTRUCTGC /* HACK */ … … 3667 3659 /** @} */ 3668 3660 3669 #ifdef VBOX_WITH_STATISTICS /** @todo move this chunk to the heap. */3670 3661 /** @name Statistics 3671 3662 * @{ */ 3672 /** R0: Pointer to the statistics. */3673 R0PTRTYPE(PGMCPUSTATS *) pStatsR0;3674 3663 /** R0: Which statistic this \#PF should be attributed to. */ 3675 3664 R0PTRTYPE(PSTAMPROFILE) pStatTrap0eAttributionR0; 3676 /** R3: Pointer to the statistics. */ 3677 R3PTRTYPE(PGMCPUSTATS *) pStatsR3; 3678 /** Alignment padding. */ 3679 RTR3PTR pPaddingR3; 3665 /** These are statistics that used to be on the hyper heap. */ 3666 PGMCPUSTATS Stats; 3680 3667 /** @} */ 3681 #endif /* VBOX_WITH_STATISTICS */3682 3668 } PGMCPU; 3683 3669 /** Pointer to the per-cpu PGM data. */
Note:
See TracChangeset
for help on using the changeset viewer.