VirtualBox

Changeset 23457 in vbox for trunk/src


Ignore:
Timestamp:
Sep 30, 2009 11:39:55 PM (15 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
53054
Message:

PGMPAGE: HCPhys and idPage migration work, part 1.

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

Legend:

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

    r23455 r23457  
    642642    uint32_t    fSomethingElse0 : 1;
    643643    /** The Page ID.
    644      * @todo  Merge with HCPhysY once we've liberated HCPhysY of its stuff.
    645      *        The HCPhysY will then be 100% static. */
     644     * @todo  Merge with HCPhysY once we've liberated HCPhysY of its stuff? The
     645     *        HCPhysY will then be 100% static. */
    646646    uint32_t    idPageY : 28;
    647647    /** The page type (PGMPAGETYPE). */
     
    695695#define PGM_PAGE_INIT(pPage, _HCPhys, _idPage, _uType, _uState) \
    696696    do { \
    697         (pPage)->HCPhysY             = (_HCPhys); \
     697        RTHCPHYS SetHCPhysTmp = (_HCPhys); \
     698        AssertFatal(!(SetHCPhysTmp & ~UINT64_C(0x0000fffffffff000))); \
     699        (pPage)->HCPhysY             = (SetHCPhysTmp); \
    698700        (pPage)->u2StateY            = (_uState); \
    699701        (pPage)->fWrittenToY         = 0; \
     
    760762 * @param   pPage       Pointer to the physical guest page tracking structure.
    761763 */
    762 #define PGM_PAGE_GET_HCPHYS(pPage)          ( (pPage)->HCPhysY & UINT64_C(0x0000fffffffff000) )
     764#ifdef PGM_PAGE_WITH_PAGEID_IN_HCPHYS
     765# define PGM_PAGE_GET_HCPHYS(pPage)         ( (pPage)->HCPhysY & UINT64_C(0x0000fffffffff000) )
     766#else
     767# define PGM_PAGE_GET_HCPHYS(pPage)         ( (pPage)->HCPhysY )
     768#endif
    763769
    764770/**
     
    767773 * @param   _HCPhys     The new host physical address.
    768774 */
     775#ifdef PGM_PAGE_WITH_PAGEID_IN_HCPHYS
    769776#define PGM_PAGE_SET_HCPHYS(pPage, _HCPhys) \
    770     do { (pPage)->HCPhysY = (((pPage)->HCPhysY) & UINT64_C(0xffff000000000fff)) \
    771                           | ((_HCPhys) & UINT64_C(0x0000fffffffff000)); } while (0)
     777    do { \
     778        RTHCPHYS SetHCPhysTmp = (_HCPhys); \
     779        AssertFatal(!(SetHCPhysTmp & ~UINT64_C(0x0000fffffffff000))); \
     780        (pPage)->HCPhysY = (((pPage)->HCPhysY) & UINT64_C(0xffff000000000fff)) \
     781                         | SetHCPhysTmp; \
     782    } while (0)
     783#else
     784# define PGM_PAGE_SET_HCPHYS(pPage, _HCPhys) \
     785    do { \
     786        RTHCPHYS SetHCPhysTmp = (_HCPhys); \
     787        AssertFatal(!(SetHCPhysTmp & ~UINT64_C(0x0000fffffffff000))); \
     788        (pPage)->HCPhysY = SetHCPhysTmp; \
     789    } while (0)
     790#endif
    772791
    773792/**
     
    776795 * @param   pPage       Pointer to the physical guest page tracking structure.
    777796 */
    778 #define PGM_PAGE_GET_PAGEID(pPage)          ( (pPage)->idPageY )
    779 /* later:
    780 #define PGM_PAGE_GET_PAGEID(pPage)          (  ((uint32_t)(pPage)->HCPhysY >> (48 - 12))
     797#ifdef PGM_PAGE_WITH_PAGEID_IN_HCPHYS
     798# define PGM_PAGE_GET_PAGEID(pPage)         (  ((uint32_t)(pPage)->HCPhysY >> (48 - 12))
    781799                                             | ((uint32_t)(pPage)->HCPhysY & 0xfff) )
    782 */
     800#else
     801# define PGM_PAGE_GET_PAGEID(pPage)         ( (pPage)->idPageY )
     802#endif
     803
    783804/**
    784805 * Sets the Page ID.
    785806 * @param   pPage       Pointer to the physical guest page tracking structure.
    786807 */
    787 #define PGM_PAGE_SET_PAGEID(pPage, _idPage) do { (pPage)->idPageY = (_idPage); } while (0)
    788 /* later:
    789 #define PGM_PAGE_SET_PAGEID(pPage, _idPage) do { (pPage)->HCPhysY = (((pPage)->HCPhysY) & UINT64_C(0x0000fffffffff000)) \
    790                                                                   | ((_idPage) & 0xfff) \
    791                                                                   | (((_idPage) & 0x0ffff000) << (48-12)); } while (0)
    792 */
     808#ifdef PGM_PAGE_WITH_PAGEID_IN_HCPHYS
     809# define PGM_PAGE_SET_PAGEID(pPage, _idPage) \
     810    do { \
     811        (pPage)->HCPhysY = (((pPage)->HCPhysY) & UINT64_C(0x0000fffffffff000)) \
     812                         | ((_idPage) & 0xfff) \
     813                         | (((_idPage) & 0x0ffff000) << (48-12)); \
     814    } while (0)
     815#else
     816# define PGM_PAGE_SET_PAGEID(pPage, _idPage) \
     817    do { \
     818        (pPage)->idPageY = (_idPage); \
     819    } while (0)
     820#endif
    793821
    794822/**
     
    797825 * @param   pPage       Pointer to the physical guest page tracking structure.
    798826 */
    799 #define PGM_PAGE_GET_CHUNKID(pPage)         ( (pPage)->idPageY >> GMM_CHUNKID_SHIFT )
    800 /* later:
    801 #if GMM_CHUNKID_SHIFT == 12
    802 # define PGM_PAGE_GET_CHUNKID(pPage)        ( (uint32_t)((pPage)->HCPhysY >> 48) )
    803 #elif GMM_CHUNKID_SHIFT > 12
    804 # define PGM_PAGE_GET_CHUNKID(pPage)        ( (uint32_t)((pPage)->HCPhysY >> (48 + (GMM_CHUNKID_SHIFT - 12)) )
    805 #elif GMM_CHUNKID_SHIFT < 12
    806 # define PGM_PAGE_GET_CHUNKID(pPage)        (   ( (uint32_t)((pPage)->HCPhysY >> 48)   << (12 - GMM_CHUNKID_SHIFT) ) \
    807                                              |  ( (uint32_t)((pPage)->HCPhysY & 0xfff) >> GMM_CHUNKID_SHIFT ) )
     827#ifdef PGM_PAGE_WITH_PAGEID_IN_HCPHYS
     828# if GMM_CHUNKID_SHIFT == 12
     829#  define PGM_PAGE_GET_CHUNKID(pPage)       ( (uint32_t)((pPage)->HCPhysY >> 48) )
     830# elif GMM_CHUNKID_SHIFT > 12
     831#  define PGM_PAGE_GET_CHUNKID(pPage)       ( (uint32_t)((pPage)->HCPhysY >> (48 + (GMM_CHUNKID_SHIFT - 12)) )
     832# elif GMM_CHUNKID_SHIFT < 12
     833#  define PGM_PAGE_GET_CHUNKID(pPage)       (   ( (uint32_t)((pPage)->HCPhysY >> 48)   << (12 - GMM_CHUNKID_SHIFT) ) \
     834# else
     835#  error "GMM_CHUNKID_SHIFT isn't defined or something."
     836# endif
    808837#else
    809 # error "GMM_CHUNKID_SHIFT isn't defined or something."
    810 #endif
    811 */
     838# define PGM_PAGE_GET_CHUNKID(pPage)        ( (pPage)->idPageY >> GMM_CHUNKID_SHIFT )
     839#endif
    812840
    813841/**
     
    816844 * @param   pPage       Pointer to the physical guest page tracking structure.
    817845 */
    818 #define PGM_PAGE_GET_PAGE_IN_CHUNK(pPage)   ( (pPage)->idPageY & GMM_PAGEID_IDX_MASK )
    819 /* later:
    820 #if GMM_CHUNKID_SHIFT <= 12
    821 # define PGM_PAGE_GET_PAGE_IN_CHUNK(pPage)  ( (uint32_t)((pPage)->HCPhysY & GMM_PAGEID_IDX_MASK) )
     846#ifdef PGM_PAGE_WITH_PAGEID_IN_HCPHYS
     847# if GMM_CHUNKID_SHIFT <= 12
     848#  define PGM_PAGE_GET_PAGE_IN_CHUNK(pPage) ( (uint32_t)((pPage)->HCPhysY & GMM_PAGEID_IDX_MASK) )
     849# else
     850#  define PGM_PAGE_GET_PAGE_IN_CHUNK(pPage) (   (uint32_t)((pPage)->HCPhysY & 0xfff) \
     851                                             |  ( (uint32_t)((pPage)->HCPhysY >> 48) & (RT_BIT_32(GMM_CHUNKID_SHIFT - 12) - 1) ) )
     852# endif
    822853#else
    823 # define PGM_PAGE_GET_PAGE_IN_CHUNK(pPage)  (   (uint32_t)((pPage)->HCPhysY & 0xfff) \
    824                                              |  ( (uint32_t)((pPage)->HCPhysY >> 48) & (RT_BIT_32(GMM_CHUNKID_SHIFT - 12) - 1) ) )
    825 #endif
    826 */
     854# define PGM_PAGE_GET_PAGE_IN_CHUNK(pPage)  ( (pPage)->idPageY & GMM_PAGEID_IDX_MASK )
     855#endif
    827856
    828857
  • trunk/src/VBox/VMM/PGMPhys.cpp

    r23453 r23457  
    16001600                {
    16011601                    PGM_PAGE_INIT(&pNew->RamRange.aPages[iPage],
    1602                                   paPages[iPage].Phys & X86_PTE_PAE_PG_MASK, NIL_GMM_PAGEID,
     1602                                  paPages[iPage].Phys, NIL_GMM_PAGEID,
    16031603                                  PGMPAGETYPE_MMIO2, PGM_PAGE_STATE_ALLOCATED);
    16041604                }
     
    18811881VMMR3DECL(int) PGMR3PhysMMIO2Unmap(PVM pVM, PPDMDEVINS pDevIns, uint32_t iRegion, RTGCPHYS GCPhys)
    18821882{
    1883     bool        fInformREM = false;
    1884     RTGCPHYS    GCPhysRangeREM;
    1885     RTGCPHYS    cbRangeREM;
    1886 
    18871883    /*
    18881884     * Validate input
     
    19091905    pgmLock(pVM);
    19101906
     1907    RTGCPHYS    GCPhysRangeREM;
     1908    RTGCPHYS    cbRangeREM;
     1909    bool        fInformREM;
    19111910    if (pCur->fOverlapping)
    19121911    {
     
    19301929            pPageDst++;
    19311930        }
     1931
     1932        GCPhysRangeREM = NIL_RTGCPHYS;  /* shuts up gcc */
     1933        cbRangeREM     = RTGCPHYS_MAX;  /* ditto */
     1934        fInformREM     = false;
    19321935    }
    19331936    else
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