VirtualBox

Changeset 31170 in vbox for trunk/src/VBox/VMM/VMMR0


Ignore:
Timestamp:
Jul 28, 2010 3:20:02 PM (15 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
64156
Message:

PGM: More inline cleanup (prep for tracking dynamic mappings in raw-mode).

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/VMMR0/PGMR0DynMap.cpp

    r31126 r31170  
    8181#endif
    8282
     83/** Converts a PGMCPUM::AutoSet pointer into a PVMCPU. */
     84#define PGMR0DYNMAP_2_VMCPU(pSet)           (RT_FROM_MEMBER(pSet, VMCPU, pgm.s.AutoSet))
     85
     86/** Converts a PGMCPUM::AutoSet pointer into a PVM. */
     87#define PGMR0DYNMAP_2_VM(pSet)              (PGMR0DYNMAP_2_VMCPU(pSet)->CTX_SUFF(pVM))
     88
    8389
    8490/*******************************************************************************
     
    11791185 * @param   HCPhys      The address of the page to be mapped.
    11801186 * @param   iPage       The page index pgmR0DynMapPage hashed HCPhys to.
    1181  * @param   pVM         The shared VM structure, for statistics only.
    1182  */
    1183 static uint32_t pgmR0DynMapPageSlow(PPGMR0DYNMAP pThis, RTHCPHYS HCPhys, uint32_t iPage, PVM pVM)
     1187 */
     1188static uint32_t pgmR0DynMapPageSlow(PPGMR0DYNMAP pThis, RTHCPHYS HCPhys, uint32_t iPage)
    11841189{
    11851190#ifdef VBOX_WITH_STATISTICS
    1186     PVMCPU pVCpu = VMMGetCpu(pVM);
     1191    PVMCPU pVCpu = PGMR0DYNMAP_2_VMCPU(pThis);
    11871192#endif
    11881193    STAM_COUNTER_INC(&pVCpu->pgm.s.CTX_SUFF(pStats)->StatR0DynMapPageSlow);
     
    12801285 * @param   HCPhys      The address of the page to be mapped.
    12811286 * @param   iRealCpu    The real cpu set index. (optimization)
    1282  * @param   pVM         The shared VM structure, for statistics only.
    12831287 * @param   ppvPage     Where to the page address.
    12841288 */
    1285 DECLINLINE(uint32_t) pgmR0DynMapPage(PPGMR0DYNMAP pThis, RTHCPHYS HCPhys, int32_t iRealCpu, PVM pVM, void **ppvPage)
     1289DECLINLINE(uint32_t) pgmR0DynMapPage(PPGMR0DYNMAP pThis, RTHCPHYS HCPhys, int32_t iRealCpu, void **ppvPage)
    12861290{
    12871291#ifdef VBOX_WITH_STATISTICS
    1288     PVMCPU              pVCpu   = VMMGetCpu(pVM);
     1292    PVMCPU              pVCpu   = PGMR0DYNMAP_2_VMCPU(pThis);
    12891293#endif
    12901294    RTSPINLOCKTMP       Tmp     = RTSPINLOCKTMP_INITIALIZER;
     
    13241328            else
    13251329            {
    1326                 iPage = pgmR0DynMapPageSlow(pThis, HCPhys, iPage, pVM);
     1330                iPage = pgmR0DynMapPageSlow(pThis, HCPhys, iPage);
    13271331                if (RT_UNLIKELY(iPage == UINT32_MAX))
    13281332                {
     
    18291833 *
    18301834 * @returns VINF_SUCCESS, bails out to ring-3 on failure.
    1831  * @param   pVM         The shared VM structure (for statistics).
    18321835 * @param   pSet        The set.
    18331836 * @param   HCPhys      The physical address of the page.
     
    18361839 * @remarks This is a very hot path.
    18371840 */
    1838 int pgmR0DynMapHCPageCommon(PVM pVM, PPGMMAPSET pSet, RTHCPHYS HCPhys, void **ppv)
    1839 {
    1840     LogFlow(("pgmR0DynMapHCPageCommon: pVM=%p pSet=%p HCPhys=%RHp ppv=%p\n",
    1841              pVM, pSet, HCPhys, ppv));
     1841int pgmR0DynMapHCPageCommon(PPGMMAPSET pSet, RTHCPHYS HCPhys, void **ppv)
     1842{
     1843    LogFlow(("pgmR0DynMapHCPageCommon: pSet=%p HCPhys=%RHp ppv=%p\n", pSet, HCPhys, ppv));
    18421844#ifdef VBOX_WITH_STATISTICS
    1843     PVMCPU pVCpu = VMMGetCpu(pVM);
     1845    PVMCPU pVCpu = PGMR0DYNMAP_2_VMCPU(pSet);
    18441846#endif
    18451847    AssertMsg(pSet->iCpu == RTMpCpuIdToSetIndex(RTMpCpuId()), ("%d %d(%d) efl=%#x\n", pSet->iCpu, RTMpCpuIdToSetIndex(RTMpCpuId()), RTMpCpuId(), ASMGetFlags()));
     
    18491851     */
    18501852    void *pvPage;
    1851     uint32_t const  iPage = pgmR0DynMapPage(g_pPGMR0DynMap, HCPhys, pSet->iCpu, pVM, &pvPage);
     1853    uint32_t const  iPage = pgmR0DynMapPage(g_pPGMR0DynMap, HCPhys, pSet->iCpu, &pvPage);
    18521854    if (RT_UNLIKELY(iPage == UINT32_MAX))
    18531855    {
     
    18551857                         g_pPGMR0DynMap->cLoad, g_pPGMR0DynMap->cMaxLoad, g_pPGMR0DynMap->cPages, g_pPGMR0DynMap->cGuardPages);
    18561858        if (!g_fPGMR0DynMapTestRunning)
    1857             VMMRZCallRing3NoCpu(pVM, VMMCALLRING3_VM_R0_ASSERTION, 0);
     1859            VMMRZCallRing3NoCpu(PGMR0DYNMAP_2_VM(pSet), VMMCALLRING3_VM_R0_ASSERTION, 0);
    18581860        *ppv = NULL;
    18591861        return VERR_PGM_DYNMAP_FAILED;
     
    19511953                RTAssertMsg2Weak("PGMDynMapHCPage: set is full!\n");
    19521954                if (!g_fPGMR0DynMapTestRunning)
    1953                     VMMRZCallRing3NoCpu(pVM, VMMCALLRING3_VM_R0_ASSERTION, 0);
     1955                    VMMRZCallRing3NoCpu(PGMR0DYNMAP_2_VM(pSet), VMMCALLRING3_VM_R0_ASSERTION, 0);
    19541956                *ppv = NULL;
    19551957                return VERR_PGM_DYNMAP_FULL_SET;
     
    19871989     * Call common code.
    19881990     */
    1989     int rc = pgmR0DynMapHCPageCommon(pVM, pSet, HCPhys, ppv);
     1991    int rc = pgmR0DynMapHCPageCommon(pSet, HCPhys, ppv);
    19901992
    19911993    STAM_PROFILE_STOP(&pVCpu->pgm.s.StatR0DynMapHCPage, a);
Note: See TracChangeset for help on using the changeset viewer.

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