VirtualBox

Changeset 17279 in vbox for trunk/src


Ignore:
Timestamp:
Mar 3, 2009 2:05:15 PM (16 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
43640
Message:

PGM,MM: Attacking the shadow page pool tracking info stored in PGMPPAGE, replacing direct access with PGM_PAGE_SET/GET_XXXX access. Required to get rid of MM_RAM_FLAGS_* and to be able to restructure PGMPAGE. MM_RAM_FLAGS_NO_REFS_MASK fully eliminated already.

Location:
trunk/src/VBox/VMM
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/PGMInternal.h

    r17205 r17279  
    958958     || (pPage)->u2HandlerVirtStateX == PGM_PAGE_HNDL_VIRT_STATE_ALL )
    959959
     960
     961
     962
     963/** @def PGM_PAGE_GET_TRACKING
     964 * Gets the packed shadow page pool tracking data associated with a guest page.
     965 * @returns uint16_t containing the data.
     966 * @param   pPage       Pointer to the physical guest page tracking structure.
     967 */
     968#define PGM_PAGE_GET_TRACKING(pPage) \
     969    ( *((uint16_t *)&(pPage)->HCPhys + 3) )
     970
     971/** @def PGM_PAGE_SET_TRACKING
     972 * Sets the packed shadow page pool tracking data associated with a guest page.
     973 * @param   pPage               Pointer to the physical guest page tracking structure.
     974 * @param   u16TrackingData     The tracking data to store.
     975 */
     976#define PGM_PAGE_SET_TRACKING(pPage, u16TrackingData) \
     977    do { *((uint16_t *)&(pPage)->HCPhys + 3) = (u16TrackingData); } while (0)
     978
     979/** @def PGM_PAGE_GET_TD_CREFS
     980 * Gets the @a cRefs tracking data member.
     981 * @returns cRefs.
     982 * @param   pPage               Pointer to the physical guest page tracking structure.
     983 */
     984#define PGM_PAGE_GET_TD_CREFS(pPage) \
     985    ((PGM_PAGE_GET_TRACKING(pPage) >> PGMPOOL_TD_CREFS_SHIFT) & PGMPOOL_TD_CREFS_MASK)
     986
     987#define PGM_PAGE_GET_TD_IDX(pPage) \
     988    ((PGM_PAGE_GET_TRACKING(pPage) >> PGMPOOL_TD_IDX_SHIFT)   & PGMPOOL_TD_IDX_MASK)
    960989
    961990/**
     
    14761505/**
    14771506 * Node in the chain of physical cross reference extents.
     1507 * @todo Calling this an 'extent' is not quite right, find a better name.
    14781508 */
    14791509#pragma pack(1)
     
    18861916
    18871917
     1918/** @name Per guest page tracking data.
     1919 * This is currently as a 16-bit word in the PGMPAGE structure, the idea though
     1920 * is to use more bits for it and split it up later on. But for now we'll play
     1921 * safe and change as little as possible.
     1922 *
     1923 * The 16-bit word has two parts:
     1924 *
     1925 * The first 14-bit forms the @a idx field. It is either the index of a page in
     1926 * the shadow page pool, or and index into the extent list.
     1927 *
     1928 * The 2 topmost bits makes up the @a cRefs field, which counts the number of
     1929 * shadow page pool references to the page. If cRefs equals
     1930 * PGMPOOL_CREFS_PHYSEXT, then the @a idx field is an indext into the extent
     1931 * (misnomer) table and not the shadow page pool.
     1932 *
     1933 * See PGM_PAGE_GET_TRACKING and PGM_PAGE_SET_TRACKING for how to get and set
     1934 * the 16-bit word.
     1935 *
     1936 * @{ */
     1937/** The shift count for getting to the cRefs part. */
     1938#define PGMPOOL_TD_CREFS_SHIFT          14
     1939/** The mask applied after shifting the tracking data down by
     1940 * PGMPOOL_TD_CREFS_SHIFT. */
     1941#define PGMPOOL_TD_CREFS_MASK           0x3
     1942/** The cRef value used to indiciate that the idx is the head of a
     1943 * physical cross reference list. */
     1944#define PGMPOOL_TD_CREFS_PHYSEXT        PGMPOOL_TD_CREFS_MASK
     1945/** The shift used to get idx. */
     1946#define PGMPOOL_TD_IDX_SHIFT            0
     1947/** The mask applied to the idx after shifting down by PGMPOOL_TD_IDX_SHIFT. */
     1948#define PGMPOOL_TD_IDX_MASK             0x3fff
     1949/** The idx value when we're out of of PGMPOOLPHYSEXT entries or/and there are
     1950 * simply too many mappings of this page. */
     1951#define PGMPOOL_TD_IDX_OVERFLOWED       PGMPOOL_TD_IDX_MASK
     1952/** @} */
     1953
     1954#ifdef MM_RAM_FLAGS_CREFS_SHIFT
     1955# if MM_RAM_FLAGS_CREFS_SHIFT - MM_RAM_FLAGS_IDX_SHIFT != PGMPOOL_TD_CREFS_SHIFT
     1956#  error "MM_RAM_FLAGS_CREFS_SHIFT - MM_RAM_FLAGS_IDX_SHIFT != PGMPOOL_TD_CREFS_SHIFT"
     1957# endif
     1958# if MM_RAM_FLAGS_CREFS_MASK != MM_RAM_FLAGS_CREFS_MASK
     1959#  error "MM_RAM_FLAGS_CREFS_MASK != MM_RAM_FLAGS_CREFS_MASK"
     1960# endif
     1961# if MM_RAM_FLAGS_CREFS_PHYSEXT != MM_RAM_FLAGS_CREFS_PHYSEXT
     1962#  error "MM_RAM_FLAGS_CREFS_PHYSEXT != MM_RAM_FLAGS_CREFS_PHYSEXT"
     1963# endif
     1964# if MM_RAM_FLAGS_IDX_SHIFT - 48 != PGMPOOL_TD_IDX_SHIFT
     1965#  error "MM_RAM_FLAGS_IDX_SHIFT - 48 != PGMPOOL_TD_IDX_SHIFT"
     1966# endif
     1967# if MM_RAM_FLAGS_IDX_MASK != PGMPOOL_TD_IDX_MASK
     1968#  error "MM_RAM_FLAGS_IDX_MASK != PGMPOOL_TD_IDX_MASK"
     1969# endif
     1970# if MM_RAM_FLAGS_IDX_OVERFLOWED != PGMPOOL_TD_IDX_OVERFLOWED
     1971#  error "MM_RAM_FLAGS_IDX_OVERFLOWED != PGMPOOL_TD_IDX_OVERFLOWED"
     1972# endif
     1973#endif
     1974
    18881975
    18891976/**
     
    46774764     */
    46784765# ifdef LOG_ENABLED
    4679     const RTHCPHYS HCPhysOrg = pPhysPage->HCPhys; /** @todo PAGE FLAGS */
     4766    const unsigned uOrg = PGM_PAGE_GET_TRACKING(pPhysPage);
    46804767# endif
    4681     const unsigned cRefs = pPhysPage->HCPhys >> MM_RAM_FLAGS_CREFS_SHIFT; /** @todo PAGE FLAGS */
     4768    const unsigned cRefs = PGM_PAGE_GET_TD_CREFS(pPhysPage);
    46824769    if (cRefs == 1)
    46834770    {
    4684         Assert(pPoolPage->idx == ((pPhysPage->HCPhys >> MM_RAM_FLAGS_IDX_SHIFT) & MM_RAM_FLAGS_IDX_MASK));
    4685         pPhysPage->HCPhys = pPhysPage->HCPhys & MM_RAM_FLAGS_NO_REFS_MASK;
     4771        Assert(pPoolPage->idx == PGM_PAGE_GET_TD_IDX(pPhysPage));
     4772        PGM_PAGE_SET_TRACKING(pPhysPage, 0);
    46864773    }
    46874774    else
    46884775        pgmPoolTrackPhysExtDerefGCPhys(pPool, pPoolPage, pPhysPage);
    4689     Log2(("pgmTrackDerefGCPhys: HCPhys=%RHp -> %RHp\n", HCPhysOrg, pPhysPage->HCPhys));
     4776    Log2(("pgmTrackDerefGCPhys: %x -> %x HCPhys=%RGp\n", uOrg, PGM_PAGE_GET_TRACKING(pPhysPage), PGM_PAGE_GET_HCPHYS(pPhysPage) ));
    46904777}
    46914778#endif /* PGMPOOL_WITH_GCPHYS_TRACKING */
  • trunk/src/VBox/VMM/VMMAll/PGMAllBth.h

    r17216 r17279  
    946946    PPGMPOOLPAGE    pShwPde;
    947947    PX86PDPAE       pPDDst;
    948    
     948
    949949    /* Fetch the pgm pool shadow descriptor. */
    950950    rc = pgmShwGetPaePoolPagePD(&pVM->pgm.s, GCPtrPage, &pShwPde);
     
    14251425    {
    14261426        STAM_COUNTER_INC(&pVM->pgm.s.StatTrackVirgin);
    1427         u16 = (1 << (MM_RAM_FLAGS_CREFS_SHIFT - MM_RAM_FLAGS_IDX_SHIFT)) | pShwPage->idx;
     1427        u16 = (1 << PGMPOOL_TD_CREFS_SHIFT) | pShwPage->idx;
    14281428    }
    14291429    else
    14301430        u16 = pgmPoolTrackPhysExtAddref(pVM, u16, pShwPage->idx);
    14311431
    1432     /* write back, trying to be clever... */
    1433     Log2(("SyncPageWorkerTrackAddRef: u16=%#x pPage->HCPhys=%RHp->%RHp iPTDst=%#x\n",
    1434           u16, pPage->HCPhys, (pPage->HCPhys & MM_RAM_FLAGS_NO_REFS_MASK) | ((uint64_t)u16 << MM_RAM_FLAGS_CREFS_SHIFT), iPTDst));
    1435     *((uint16_t *)&pPage->HCPhys + 3) = u16; /** @todo PAGE FLAGS */
     1432    /* write back */
     1433    Log2(("SyncPageWorkerTrackAddRef: u16=%#x->%#x  iPTDst=%#x\n", u16, PGM_PAGE_GET_TRACKING(pPage), iPTDst));
     1434    PGM_PAGE_SET_TRACKING(pPage, u16);
     1435
    14361436# endif /* PGMPOOL_WITH_GCPHYS_TRACKING */
    14371437
     
    16551655    PPGMPOOLPAGE    pShwPde;
    16561656    PX86PDPAE       pPDDst;
    1657    
     1657
    16581658    /* Fetch the pgm pool shadow descriptor. */
    16591659    int rc = pgmShwGetPaePoolPagePD(&pVM->pgm.s, GCPtrPage, &pShwPde);
     
    23902390    PX86PDPAE       pPDDst;
    23912391    PSHWPDE         pPdeDst;
    2392    
     2392
    23932393    /* Fetch the pgm pool shadow descriptor. */
    23942394    rc = pgmShwGetPaePoolPagePD(&pVM->pgm.s, GCPtrPage, &pShwPde);
     
    25702570                         | (PdeSrc.u & ~(GST_PDE_PG_MASK | X86_PDE_AVL_MASK | X86_PDE_PCD | X86_PDE_PWT | X86_PDE_PS | X86_PDE4M_G | X86_PDE4M_D));
    25712571                *pPdeDst = PdeDst;
    2572 # if defined(IN_RC) && defined(VBOX_WITH_PGMPOOL_PAGING_ONLY)           
     2572# if defined(IN_RC) && defined(VBOX_WITH_PGMPOOL_PAGING_ONLY)
    25732573                PGMDynUnlockHCPage(pVM, (uint8_t *)pPdeDst);
    25742574# endif
     
    26762676            }
    26772677            *pPdeDst = PdeDst;
    2678 # if defined(IN_RC) && defined(VBOX_WITH_PGMPOOL_PAGING_ONLY)           
     2678# if defined(IN_RC) && defined(VBOX_WITH_PGMPOOL_PAGING_ONLY)
    26792679            PGMDynUnlockHCPage(pVM, (uint8_t *)pPdeDst);
    26802680# endif
     
    28152815    PX86PDPAE       pPDDst;
    28162816    PSHWPDE         pPdeDst;
    2817    
     2817
    28182818    /* Fetch the pgm pool shadow descriptor. */
    28192819    rc = pgmShwGetPaePoolPagePD(&pVM->pgm.s, GCPtrPage, &pShwPde);
     
    46884688
    46894689#  ifndef PGM_WITHOUT_MAPPINGS
    4690     /* Apply all hypervisor mappings to the new CR3. 
     4690    /* Apply all hypervisor mappings to the new CR3.
    46914691     * Note that SyncCR3 will be executed in case CR3 is changed in a guest paging mode; this will
    46924692     * make sure we check for conflicts in the new CR3 root.
  • trunk/src/VBox/VMM/VMMAll/PGMAllHandler.cpp

    r16465 r17279  
    245245# endif
    246246
    247                 if ((u16 >> (MM_RAM_FLAGS_CREFS_SHIFT - MM_RAM_FLAGS_IDX_SHIFT)) != MM_RAM_FLAGS_CREFS_PHYSEXT)
     247                if ((u16 >> PGMPOOL_TD_CREFS_SHIFT) != MM_RAM_FLAGS_CREFS_PHYSEXT)
    248248                    pgmPoolTrackFlushGCPhysPT(pVM,
    249249                                              pPage,
    250250                                              u16 & MM_RAM_FLAGS_IDX_MASK,
    251                                               u16 >> (MM_RAM_FLAGS_CREFS_SHIFT - MM_RAM_FLAGS_IDX_SHIFT));
    252                 else if (u16 != ((MM_RAM_FLAGS_CREFS_PHYSEXT << (MM_RAM_FLAGS_CREFS_SHIFT - MM_RAM_FLAGS_IDX_SHIFT)) | MM_RAM_FLAGS_IDX_OVERFLOWED))
     251                                              u16 >> PGMPOOL_TD_CREFS_SHIFT);
     252                else if (u16 != ((MM_RAM_FLAGS_CREFS_PHYSEXT << PGMPOOL_TD_CREFS_SHIFT) | MM_RAM_FLAGS_IDX_OVERFLOWED))
    253253                    pgmPoolTrackFlushGCPhysPTs(pVM, pPage, u16 & MM_RAM_FLAGS_IDX_MASK);
    254254                else
     
    969969
    970970            /* Do the actual remapping here. This page now serves as an alias for the backing memory specified. */
    971             pPage->HCPhys = pPageRemap->HCPhys & MM_RAM_FLAGS_NO_REFS_MASK;
     971#ifdef VBOX_WITH_NEW_PHYS_CODE
     972            AssertReleaseFailed(); /** @todo see todo above! */
     973#else
     974            pPage->HCPhys = pPageRemap->HCPhys;
     975            PGM_PAGE_SET_TRACKING(pPage, 0);
     976#endif
    972977
    973978            LogFlow(("PGMHandlerPhysicalPageAlias %RGp -> %RGp - %RHp\n", GCPhysPage, GCPhysPageRemap, pPageRemap->HCPhys));
  • trunk/src/VBox/VMM/VMMAll/PGMAllPool.cpp

    r17231 r17279  
    320320#  ifdef PGMPOOL_WITH_GCPHYS_TRACKING
    321321                    X86PTE GstPte;
    322                    
     322
    323323                    int rc = pgmPoolPhysSimpleReadGCPhys(pPool->CTX_SUFF(pVM), &GstPte, pvAddress, GCPhysFault, sizeof(GstPte));
    324324                    AssertRC(rc);
     
    371371
    372372                LogFlow(("pgmPoolMonitorChainChanging PAE for 32 bits: iGst=%x idx = %d page idx=%d\n", iGst, iShwPdpt, pPage->enmKind - PGMPOOLKIND_PAE_PD0_FOR_32BIT_PD));
    373                 if (iShwPdpt == pPage->enmKind - PGMPOOLKIND_PAE_PD0_FOR_32BIT_PD)
     373                if (iShwPdpt == pPage->enmKind - (unsigned)PGMPOOLKIND_PAE_PD0_FOR_32BIT_PD)
    374374                {
    375                     for (unsigned i=0;i<2;i++)
     375                    for (unsigned i = 0; i < 2; i++)
    376376                    {
    377377#  ifndef IN_RING0
     
    678678#ifdef VBOX_WITH_PGMPOOL_PAGING_ONLY
    679679# ifndef IN_RING0
    680                     else 
     680                    else
    681681# endif /* !IN_RING0 */
    682682                    if (uShw.pPDPae->a[iShw2].n.u1Present)
     
    15801580                if ((PGMPOOLKIND)pPage->enmKind == enmKind)
    15811581                {
    1582                     /* Put it at the start of the use list to make sure pgmPoolTrackAddUser 
     1582                    /* Put it at the start of the use list to make sure pgmPoolTrackAddUser
    15831583                     * doesn't flush it in case there are no more free use records.
    15841584                     */
     
    23342334        unsigned iPage = pRam->cb >> PAGE_SHIFT;
    23352335        while (iPage-- > 0)
    2336             pRam->aPages[iPage].HCPhys &= MM_RAM_FLAGS_NO_REFS_MASK; /** @todo PAGE FLAGS */
     2336            PGM_PAGE_SET_TRACKING(&pRam->aPages[iPage], 0);
    23372337    }
    23382338
     
    29172917    STAM_PROFILE_START(&pPool->StatTrackFlushGCPhysPT, f);
    29182918    pgmPoolTrackFlushGCPhysPTInt(pVM, pPhysPage, iShw, cRefs);
    2919     pPhysPage->HCPhys &= MM_RAM_FLAGS_NO_REFS_MASK; /** @todo PAGE FLAGS */
     2919    PGM_PAGE_SET_TRACKING(pPhysPage, 0);
    29202920    STAM_PROFILE_STOP(&pPool->StatTrackFlushGCPhysPT, f);
    29212921}
     
    29552955    pPhysExt->iNext = pPool->iPhysExtFreeHead;
    29562956    pPool->iPhysExtFreeHead = iPhysExtStart;
    2957     pPhysPage->HCPhys &= MM_RAM_FLAGS_NO_REFS_MASK; /** @todo PAGE FLAGS */
     2957    PGM_PAGE_SET_TRACKING(pPhysPage, 0);
    29582958
    29592959    STAM_PROFILE_STOP(&pPool->StatTrackFlushGCPhysPTs, f);
     
    30603060    }
    30613061
    3062     pPhysPage->HCPhys &= MM_RAM_FLAGS_NO_REFS_MASK; /** @todo PAGE FLAGS */
     3062    PGM_PAGE_SET_TRACKING(pPhysPage, 0);
    30633063    STAM_PROFILE_STOP(&pPool->StatTrackFlushGCPhysPTsSlow, s);
    30643064    return VINF_SUCCESS;
     
    33593359        STAM_COUNTER_INC(&pVM->pgm.s.StatTrackAliasedMany);
    33603360        LogFlow(("pgmPoolTrackPhysExtAddref: %d:{,,%d}\n", iPhysExt, iShwPT));
    3361         return iPhysExt | (MM_RAM_FLAGS_CREFS_PHYSEXT << (MM_RAM_FLAGS_CREFS_SHIFT - MM_RAM_FLAGS_IDX_SHIFT));
     3361        return iPhysExt | (MM_RAM_FLAGS_CREFS_PHYSEXT << PGMPOOL_TD_CREFS_SHIFT);
    33623362    }
    33633363
     
    33743374                STAM_COUNTER_INC(&pVM->pgm.s.StatTrackAliasedMany);
    33753375                LogFlow(("pgmPoolTrackPhysExtAddref: %d:{%d} i=%d cMax=%d\n", iPhysExt, iShwPT, i, cMax));
    3376                 return iPhysExtStart | (MM_RAM_FLAGS_CREFS_PHYSEXT << (MM_RAM_FLAGS_CREFS_SHIFT - MM_RAM_FLAGS_IDX_SHIFT));
     3376                return iPhysExtStart | (MM_RAM_FLAGS_CREFS_PHYSEXT << PGMPOOL_TD_CREFS_SHIFT);
    33773377            }
    33783378        if (!--cMax)
     
    33813381            pgmPoolTrackPhysExtFreeList(pVM, iPhysExtStart);
    33823382            LogFlow(("pgmPoolTrackPhysExtAddref: overflow (1) iShwPT=%d\n", iShwPT));
    3383             return MM_RAM_FLAGS_IDX_OVERFLOWED | (MM_RAM_FLAGS_CREFS_PHYSEXT << (MM_RAM_FLAGS_CREFS_SHIFT - MM_RAM_FLAGS_IDX_SHIFT));
     3383            return MM_RAM_FLAGS_IDX_OVERFLOWED | (MM_RAM_FLAGS_CREFS_PHYSEXT << PGMPOOL_TD_CREFS_SHIFT);
    33843384        }
    33853385    }
     
    33913391        STAM_COUNTER_INC(&pVM->pgm.s.StatTrackOverflows);
    33923392        pgmPoolTrackPhysExtFreeList(pVM, iPhysExtStart);
    3393         return MM_RAM_FLAGS_IDX_OVERFLOWED | (MM_RAM_FLAGS_CREFS_PHYSEXT << (MM_RAM_FLAGS_CREFS_SHIFT - MM_RAM_FLAGS_IDX_SHIFT));
     3393        return MM_RAM_FLAGS_IDX_OVERFLOWED | (MM_RAM_FLAGS_CREFS_PHYSEXT << PGMPOOL_TD_CREFS_SHIFT);
    33943394    }
    33953395    pNew->iNext = iPhysExtStart;
    33963396    pNew->aidx[0] = iShwPT;
    33973397    LogFlow(("pgmPoolTrackPhysExtAddref: added new extent %d:{%d}->%d\n", iPhysExt, iShwPT, iPhysExtStart));
    3398     return iPhysExt | (MM_RAM_FLAGS_CREFS_PHYSEXT << (MM_RAM_FLAGS_CREFS_SHIFT - MM_RAM_FLAGS_IDX_SHIFT));
     3398    return iPhysExt | (MM_RAM_FLAGS_CREFS_PHYSEXT << PGMPOOL_TD_CREFS_SHIFT);
    33993399}
    34003400
     
    34113411uint16_t pgmPoolTrackPhysExtAddref(PVM pVM, uint16_t u16, uint16_t iShwPT)
    34123412{
    3413     if ((u16 >> (MM_RAM_FLAGS_CREFS_SHIFT - MM_RAM_FLAGS_IDX_SHIFT)) != MM_RAM_FLAGS_CREFS_PHYSEXT)
     3413    if ((u16 >> PGMPOOL_TD_CREFS_SHIFT) != MM_RAM_FLAGS_CREFS_PHYSEXT)
    34143414    {
    34153415        /*
    34163416         * Convert to extent list.
    34173417         */
    3418         Assert((u16 >> (MM_RAM_FLAGS_CREFS_SHIFT - MM_RAM_FLAGS_IDX_SHIFT)) == 1);
     3418        Assert((u16 >> PGMPOOL_TD_CREFS_SHIFT) == 1);
    34193419        uint16_t iPhysExt;
    34203420        PPGMPOOLPHYSEXT pPhysExt = pgmPoolTrackPhysExtAlloc(pVM, &iPhysExt);
     
    34253425            pPhysExt->aidx[0] = u16 & MM_RAM_FLAGS_IDX_MASK;
    34263426            pPhysExt->aidx[1] = iShwPT;
    3427             u16 = iPhysExt | (MM_RAM_FLAGS_CREFS_PHYSEXT << (MM_RAM_FLAGS_CREFS_SHIFT - MM_RAM_FLAGS_IDX_SHIFT));
     3427            u16 = iPhysExt | (MM_RAM_FLAGS_CREFS_PHYSEXT << PGMPOOL_TD_CREFS_SHIFT);
    34283428        }
    34293429        else
    3430             u16 = MM_RAM_FLAGS_IDX_OVERFLOWED | (MM_RAM_FLAGS_CREFS_PHYSEXT << (MM_RAM_FLAGS_CREFS_SHIFT - MM_RAM_FLAGS_IDX_SHIFT));
    3431     }
    3432     else if (u16 != (MM_RAM_FLAGS_IDX_OVERFLOWED | (MM_RAM_FLAGS_CREFS_PHYSEXT << (MM_RAM_FLAGS_CREFS_SHIFT - MM_RAM_FLAGS_IDX_SHIFT))))
     3430            u16 = MM_RAM_FLAGS_IDX_OVERFLOWED | (MM_RAM_FLAGS_CREFS_PHYSEXT << PGMPOOL_TD_CREFS_SHIFT);
     3431    }
     3432    else if (u16 != (MM_RAM_FLAGS_IDX_OVERFLOWED | (MM_RAM_FLAGS_CREFS_PHYSEXT << PGMPOOL_TD_CREFS_SHIFT)))
    34333433    {
    34343434        /*
     
    34893489                        pgmPoolTrackPhysExtFree(pVM, iPhysExt);
    34903490                        Log2(("pgmPoolTrackPhysExtDerefGCPhys: HCPhys=%RX64 idx=%d lonely\n", pPhysPage->HCPhys, pPage->idx));
    3491                         pPhysPage->HCPhys &= MM_RAM_FLAGS_NO_REFS_MASK; /** @todo PAGE FLAGS */
     3491                        PGM_PAGE_SET_TRACKING(pPhysPage, 0);
    34923492                    }
    34933493                    else if (iPhysExtPrev == NIL_PGMPOOL_PHYSEXT_INDEX)
     
    34953495                        /* head */
    34963496                        Log2(("pgmPoolTrackPhysExtDerefGCPhys: HCPhys=%RX64 idx=%d head\n", pPhysPage->HCPhys, pPage->idx));
    3497                         pPhysPage->HCPhys = (pPhysPage->HCPhys & MM_RAM_FLAGS_NO_REFS_MASK)    /** @todo PAGE FLAGS */
    3498                                           | ((uint64_t)MM_RAM_FLAGS_CREFS_PHYSEXT << MM_RAM_FLAGS_CREFS_SHIFT)
    3499                                           | ((uint64_t)iPhysExtNext << MM_RAM_FLAGS_IDX_SHIFT);
     3497                        PGM_PAGE_SET_TRACKING(pPhysPage, (PGMPOOL_TD_CREFS_PHYSEXT << PGMPOOL_TD_CREFS_SHIFT)
     3498                                                       | (iPhysExtNext << PGMPOOL_TD_IDX_SHIFT));
    35003499                        pgmPoolTrackPhysExtFree(pVM, iPhysExt);
    35013500                    }
     
    42074206        unsigned iPage = pRam->cb >> PAGE_SHIFT;
    42084207        while (iPage-- > 0)
    4209             pRam->aPages[iPage].HCPhys &= MM_RAM_FLAGS_NO_REFS_MASK; /** @todo PAGE FLAGS */
     4208            PGM_PAGE_SET_TRACKING(&pRam->aPages[iPage], 0);
    42104209    }
    42114210
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