VirtualBox

Changeset 91250 in vbox


Ignore:
Timestamp:
Sep 15, 2021 12:43:24 PM (3 years ago)
Author:
vboxsync
Message:

VMM/PGM: Moved pStatTrap0eAttributionR0 to GVMCPU. bugref:10093

Location:
trunk
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/include/VBox/vmm/gvm.h

    r90970 r91250  
    123123    } vmmr0;
    124124
     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
    125133    /** Padding the structure size to page boundrary. */
    126134#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];
    128136#else
    129     uint8_t                 abPadding3[4096 - 64*2 - 64 - 1024 - 512];
     137    uint8_t                 abPadding3[4096 - 64*2 - 64 - 1024 - 512 - 64];
    130138#endif
    131139} GVMCPU;
  • trunk/include/VBox/vmm/gvm.mac

    r90970 r91250  
    5252        alignb 64
    5353        .vmmr0              resb 512
     54        alignb 64
     55        .pgmr0              resb 64
    5456        alignb 4096
    5557endstruc
  • trunk/src/VBox/VMM/VMMAll/PGMAll.cpp

    r91247 r91250  
    893893    Log(("PGMTrap0eHandler: uErr=%RGx pvFault=%RGv eip=%04x:%RGv cr3=%RGp\n", uErr, pvFault, pRegFrame->cs.Sel, (RTGCPTR)pRegFrame->rip, (RTGCPHYS)CPUMGetGuestCR3(pVCpu)));
    894894    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; } );
    896896
    897897
     
    972972
    973973    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);
    977977    return rc;
    978978}
  • trunk/src/VBox/VMM/VMMAll/PGMAllBth.h

    r91247 r91250  
    198198        /* Force a CR3 sync to check for conflicts and emulate the instruction. */
    199199        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; });
    201201        return VINF_EM_RAW_EMULATE_INSTR;
    202202    }
     
    220220
    221221    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; });
    223223    return VINF_EM_RAW_GUEST_TRAP;
    224224}
     
    293293                    AssertMsgRC(rcStrict, ("%Rrc\n", VBOXSTRICTRC_VAL(rcStrict)));
    294294                    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; });
    296296                    return rcStrict;
    297297                }
     
    320320                    AssertMsgRC(rcStrict, ("%Rrc\n", VBOXSTRICTRC_VAL(rcStrict)));
    321321                    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; });
    323323                    return rcStrict;
    324324                }
     
    363363                rcStrict = VINF_EM_RAW_EMULATE_INSTR;
    364364
    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; });
    366366            return rcStrict;
    367367        }
     
    392392            AssertMsgRC(rcStrict, ("%Rrc\n", VBOXSTRICTRC_VAL(rcStrict)));
    393393            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; });
    395395            return rcStrict;
    396396        }
     
    402402    rcStrict = PGMInterpretInstruction(pVM, pVCpu, pRegFrame, pvFault);
    403403    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; });
    405405    return rcStrict;
    406406} /* if any kind of handler */
     
    627627        if (rc == VINF_PGM_HANDLED_DIRTY_BIT_FAULT)
    628628        {
    629             STAM_STATS({ pVCpu->pgm.s.CTX_SUFF(pStatTrap0eAttribution)
     629            STAM_STATS({ pVCpu->pgmr0.s.pStatTrap0eAttributionR0
    630630                        = rc == VINF_PGM_HANDLED_DIRTY_BIT_FAULT
    631631                          ? &pVCpu->pgm.s.Stats.StatRZTrap0eTime2DirtyAndAccessed
     
    663663        &&  !SHW_PDE_IS_P(pPDDst->a[iPDDst]))
    664664    {
    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; });
    666666#  if PGM_WITH_PAGING(PGM_GST_TYPE, PGM_SHW_TYPE)
    667667        LogFlow(("=>SyncPT %04x = %08RX64\n", (pvFault >> GST_PD_SHIFT) & GST_PD_MASK, (uint64_t)GstWalk.Pde.u));
     
    707707                            Log(("Trap0e: Detected Conflict %RGv-%RGv\n", pMapping->GCPtr, pMapping->GCPtrLast));
    708708                            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; });
    710710                            return VINF_PGM_SYNC_CR3;
    711711                        }
     
    718718                STAM_COUNTER_INC(&pVCpu->pgm.s.Stats.StatRZTrap0eGuestPFMapping);
    719719                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; });
    721721                return VINF_EM_RAW_GUEST_TRAP;
    722722            }
     
    749749        LogFlow(("PGM #PF: pgmPhysGetPageEx(%RGp) failed with %Rrc\n", GCPhys, rc));
    750750        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; });
    752752        return VINF_EM_RAW_EMULATE_INSTR;
    753753    }
     
    788788            LogFlow(("PGM: PGMInterpretInstruction balloon -> rc=%d pPage=%R[pgmpage]\n", rc, pPage));
    789789            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; });
    791791            return rc;
    792792        }
     
    800800        {
    801801            /* 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; });
    803803            return VINF_SUCCESS;
    804804        }
     
    827827                Assert(!PGM_PAGE_IS_ZERO(pPage));
    828828                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; });
    830830
    831831                rc = pgmPhysPageMakeWritable(pVM, pPage, GCPhys);
     
    873873                        PGM_INVL_PG(pVCpu, pvFault);
    874874                        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; });
    876876                        return rc;
    877877                    }
     
    888888                else
    889889                    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; });
    891891                return rc;
    892892            }
     
    936936#    endif
    937937#   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; });
    939939                return VINF_SUCCESS;
    940940            }
     
    960960                PGM_INVL_PG(pVCpu, pvFault);
    961961                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; });
    963963                return VINF_SUCCESS;
    964964            }
  • trunk/src/VBox/VMM/VMMR0/PGMR0.cpp

    r91247 r91250  
    598598    LogFlow(("PGMTrap0eHandler: uErr=%RGx GCPhysFault=%RGp eip=%RGv\n", uErr, GCPhysFault, (RTGCPTR)pRegFrame->rip));
    599599    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; } );
    601601
    602602    /* AMD uses the host's paging mode; Intel has a single mode (EPT). */
     
    700700    }
    701701
    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);
    705705    return rc;
    706706}
  • trunk/src/VBox/VMM/include/PGMInternal.h

    r91249 r91250  
    36323632
    36333633#ifdef VBOX_WITH_STATISTICS
    3634     /** @name Statistics
    3635      * @{ */
    3636     /** R0: Which statistic this \#PF should be attributed to. */
    3637     R0PTRTYPE(PSTAMPROFILE)         pStatTrap0eAttributionR0;
    36383634    /** These are statistics that used to be on the hyper heap. */
    36393635    PGMCPUSTATS                     Stats;
    3640     /** @} */
    36413636#endif
    36423637} PGMCPU;
     
    36613656#define PGM_SYNC_CLEAR_PGM_POOL                 RT_BIT(PGM_SYNC_CLEAR_PGM_POOL_BIT)
    36623657/** @} */
     3658
     3659
     3660/**
     3661 * PGM GVMCPU instance data.
     3662 */
     3663typedef 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;
    36633671
    36643672
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette