VirtualBox

Changeset 11525 in vbox for trunk/src/VBox/VMM/VMMAll


Ignore:
Timestamp:
Aug 21, 2008 9:07:51 AM (16 years ago)
Author:
vboxsync
Message:

Added support for PSE-36.

Location:
trunk/src/VBox/VMM/VMMAll
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/VMMAll/PGMAllBth.h

    r11449 r11525  
    326326        if (    PdeSrc.b.u1Size
    327327            &&  fBigPagesSupported)
    328             GCPhys = (PdeSrc.u & GST_PDE_BIG_PG_MASK)
     328            GCPhys = GST_GET_PDE_BIG_PG_GCPHYS(PdeSrc)
    329329                    | ((RTGCPHYS)pvFault & (GST_BIG_PAGE_OFFSET_MASK ^ PAGE_OFFSET_MASK));
    330330        else
     
    12111211            /* Before freeing the page, check if anything really changed. */
    12121212            PPGMPOOLPAGE    pShwPage = pgmPoolGetPageByHCPhys(pVM, PdeDst.u & SHW_PDE_PG_MASK);
    1213             RTGCPHYS        GCPhys   = PdeSrc.u & GST_PDE_BIG_PG_MASK;
     1213            RTGCPHYS        GCPhys   = GST_GET_PDE_BIG_PG_GCPHYS(PdeSrc);
    12141214# if PGM_SHW_TYPE == PGM_TYPE_PAE && PGM_GST_TYPE == PGM_TYPE_32BIT
    12151215            /* Select the right PDE as we're emulating a 4MB page directory with two 2 MB shadow PDEs.*/
     
    15911591    else
    15921592    {
    1593         GCPhys = PdeSrc.u & GST_PDE_BIG_PG_MASK;
     1593        GCPhys = GST_GET_PDE_BIG_PG_GCPHYS(PdeSrc);
    15941594# if PGM_SHW_TYPE == PGM_TYPE_PAE && PGM_GST_TYPE == PGM_TYPE_32BIT
    15951595        /* Select the right PDE as we're emulating a 4MB page directory with two 2 MB shadow PDEs.*/
     
    17061706                 */
    17071707                /* Calculate the GC physical address of this 4KB shadow page. */
    1708                 RTGCPHYS GCPhys = (PdeSrc.u & GST_PDE_BIG_PG_MASK) | ((RTGCUINTPTR)GCPtrPage & GST_BIG_PAGE_OFFSET_MASK);
     1708                RTGCPHYS GCPhys = GST_GET_PDE_BIG_PG_GCPHYS(PdeSrc) | ((RTGCUINTPTR)GCPtrPage & GST_BIG_PAGE_OFFSET_MASK);
    17091709                /* Find ram range. */
    17101710                PPGMPAGE pPage;
     
    23552355        else
    23562356        {
    2357             GCPhys = PdeSrc.u & GST_PDE_BIG_PG_MASK;
     2357            GCPhys = GST_GET_PDE_BIG_PG_GCPHYS(PdeSrc);
    23582358# if PGM_SHW_TYPE == PGM_TYPE_PAE && PGM_GST_TYPE == PGM_TYPE_32BIT
    23592359            /* Select the right PDE as we're emulating a 4MB page directory with two 2 MB shadow PDEs.*/
     
    33353335                            else
    33363336                            {
    3337                                 GCPhys = PdeSrc.u & GST_PDE_BIG_PG_MASK;
     3337                                GCPhys = GST_GET_PDE_BIG_PG_GCPHYS(PdeSrc);
    33383338#  if PGM_SHW_TYPE == PGM_TYPE_PAE && PGM_GST_TYPE == PGM_TYPE_32BIT
    33393339                                /* Select the right PDE as we're emulating a 4MB page directory with two 2 MB shadow PDEs.*/
     
    38533853                        }
    38543854# endif
    3855                         GCPhysGst = PdeSrc.u & GST_PDE_BIG_PG_MASK;
     3855                        GCPhysGst = GST_GET_PDE_BIG_PG_GCPHYS(PdeSrc);
    38563856# if PGM_SHW_TYPE == PGM_TYPE_PAE && PGM_GST_TYPE == PGM_TYPE_32BIT
    38573857                        GCPhysGst |= GCPtr & RT_BIT(X86_PAGE_2M_SHIFT);
  • trunk/src/VBox/VMM/VMMAll/PGMAllGst.h

    r10674 r11525  
    4747#undef GST_PDPT_MASK
    4848#undef GST_PDPE_PG_MASK
     49#undef GST_GET_PDE_BIG_PG_GCPHYS
    4950
    5051#if PGM_GST_TYPE == PGM_TYPE_REAL \
     
    7273# define GST_PDE_PG_MASK            X86_PDE_PG_MASK
    7374# define GST_PDE_BIG_PG_MASK        X86_PDE4M_PG_MASK
     75# define GST_GET_PDE_BIG_PG_GCPHYS(PdeGst)  pgmGstGet4MBPhysPage(&pVM->pgm.s, PdeGst)
    7476# define GST_PD_SHIFT               X86_PD_SHIFT
    7577# define GST_PD_MASK                X86_PD_MASK
     
    9395# define GST_PDE_PG_MASK            X86_PDE_PAE_PG_MASK_FULL
    9496# define GST_PDE_BIG_PG_MASK        X86_PDE2M_PAE_PG_MASK
     97# define GST_GET_PDE_BIG_PG_GCPHYS(PdeGst)  (PdeGst.u & GST_PDE_BIG_PG_MASK)
    9598# define GST_PD_SHIFT               X86_PD_PAE_SHIFT
    9699# define GST_PD_MASK                X86_PD_PAE_MASK
  • trunk/src/VBox/VMM/VMMAll/PGMAllPhys.cpp

    r9836 r11525  
    10021002                if ((fFlags & X86_CR4_PSE) && Pde.b.u1Size)
    10031003                {   /* (big page) */
    1004                     rc = PGMPhysGCPhys2HCPtr(pVM, (Pde.u & X86_PDE4M_PG_MASK) | ((RTGCUINTPTR)GCPtr & X86_PAGE_4M_OFFSET_MASK), 1 /* we always stay within one page */, pHCPtr);
     1004                    rc = PGMPhysGCPhys2HCPtr(pVM, pgmGstGet4MBPhysPage(&pVM->pgm.s, Pde) | ((RTGCUINTPTR)GCPtr & X86_PAGE_4M_OFFSET_MASK), 1 /* we always stay within one page */, pHCPtr);
    10051005                }
    10061006                else
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