VirtualBox

Changeset 7655 in vbox


Ignore:
Timestamp:
Mar 31, 2008 1:19:56 PM (17 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
29165
Message:

PAE fixes & changes

Location:
trunk
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/include/VBox/x86.h

    r7121 r7655  
    12101210#define X86_PDE4M_PG_HIGH_SHIFT             19
    12111211
    1212 /** Bits 12-51 - - PAE - Physical Page number. */
    1213 #define X86_PDE4M_PAE_PG_MASK               ( 0x000fffffffc00000ULL )
     1212/** Bits 21-36 - - PAE - Physical Page number. */
     1213#define X86_PDE2M_PAE_PG_MASK               ( 0x000fffffffe00000ULL )
    12141214/** Bits 63 - NX - PAE - No execution flag. */
    1215 #define X86_PDE4M_PAE_NX                    RT_BIT_64(63)
     1215#define X86_PDE2M_PAE_NX                    RT_BIT_64(63)
    12161216
    12171217/**
  • trunk/src/VBox/VMM/VMMAll/PGMAllBth.h

    r7642 r7655  
    829829             */
    830830            Assert(pgmMapAreMappingsEnabled(&pVM->pgm.s));
     831            Assert(PGMGetGuestMode(pVM) <= PGMMODE_32_BIT);
    831832            rc = PGM_BTH_NAME(SyncPT)(pVM, iPDSrc, pPDSrc, GCPtrPage);
    832833        }
     
    12421243     * Assert preconditions.
    12431244     */
    1244 # if GC_ARCH_BITS != 32
    1245     Assert(GCPtrPage < _4G); //???
    1246 # endif
    12471245    STAM_COUNTER_INC(&pVM->pgm.s.StatGCSyncPagePD[(GCPtrPage >> X86_PD_SHIFT) & GST_PD_MASK]);
    12481246    Assert(PdeSrc.n.u1Present);
     
    13901388                 */
    13911389                /* Calculate the GC physical address of this 4KB shadow page. */
    1392                 RTGCPHYS GCPhys = (PdeSrc.u & X86_PDE4M_PAE_PG_MASK) | ((RTGCUINTPTR)GCPtrPage & GST_BIG_PAGE_OFFSET_MASK);
     1390                RTGCPHYS GCPhys = (PdeSrc.u & X86_PDE4M_PG_MASK) | ((RTGCUINTPTR)GCPtrPage & GST_BIG_PAGE_OFFSET_MASK);
    13931391                /* Find ram range. */
    13941392                PPGMPAGE pPage;
     
    14421440                    }
    14431441#  if PGM_SHW_TYPE == PGM_TYPE_32BIT
    1444                     pVM->pgm.s.CTXMID(p,32BitPD)->a[iPDDst]        = PdeDst;
     1442                    pVM->pgm.s.CTXMID(p,32BitPD)->a[iPDDst]    = PdeDst;
    14451443#  else /* PAE */
    14461444                    pVM->pgm.s.CTXMID(ap,PaePDs)[0]->a[iPDDst] = PdeDst;
     
    25682566    Assert(pPDSrc);
    25692567#ifndef IN_GC
    2570     Assert(MMPhysGCPhys2HCVirt(pVM, (RTGCPHYS)(cr3 & X86_CR3_PAGE_MASK), sizeof(*pPDSrc)) == pPDSrc);
     2568    Assert(MMPhysGCPhys2HCVirt(pVM, (RTGCPHYS)(cr3 & GST_CR3_PAGE_MASK), sizeof(*pPDSrc)) == pPDSrc);
    25712569#endif
    25722570
     
    28912889     * Check that the Guest CR3 and all it's mappings are correct.
    28922890     */
    2893     AssertMsgReturn(pPGM->GCPhysCR3 == (cr3 & X86_CR3_PAGE_MASK),
     2891    AssertMsgReturn(pPGM->GCPhysCR3 == (cr3 & GST_CR3_PAGE_MASK),
    28942892                    ("Invalid GCPhysCR3=%VGp cr3=%VGp\n", pPGM->GCPhysCR3, (RTGCPHYS)cr3),
    28952893                    false);
     
    28972895    AssertRCReturn(rc, 1);
    28982896    HCPhys = NIL_RTHCPHYS;
    2899     rc = pgmRamGCPhys2HCPhys(pPGM, cr3 & X86_CR3_PAGE_MASK, &HCPhys);
     2897    rc = pgmRamGCPhys2HCPhys(pPGM, cr3 & GST_CR3_PAGE_MASK, &HCPhys);
    29002898    AssertMsgReturn(HCPhys == HCPhysShw, ("HCPhys=%VHp HCPhyswShw=%VHp (cr3)\n", HCPhys, HCPhysShw), false);
    29012899# ifdef IN_RING3
     
    29032901    rc = PGMR3DbgHCPtr2GCPhys(pVM, pPGM->pGuestPDHC, &GCPhys);
    29042902    AssertRCReturn(rc, 1);
    2905     AssertMsgReturn((cr3 & X86_CR3_PAGE_MASK) == GCPhys, ("GCPhys=%VGp cr3=%VGp\n", GCPhys, (RTGCPHYS)cr3), false);
     2903    AssertMsgReturn((cr3 & GST_CR3_PAGE_MASK) == GCPhys, ("GCPhys=%VGp cr3=%VGp\n", GCPhys, (RTGCPHYS)cr3), false);
    29062904# endif
    29072905    const X86PD *pPDSrc = CTXSUFF(pPGM->pGuestPD);
  • trunk/src/VBox/VMM/VMMAll/PGMAllGst.h

    r7629 r7655  
    3838#undef GST_PT_MASK
    3939#undef GST_TOTAL_PD_ENTRIES
     40#undef GST_CR3_PAGE_MASK
    4041
    4142#if PGM_GST_TYPE == PGM_TYPE_32BIT
     
    5859# define GST_PT_SHIFT               X86_PT_SHIFT
    5960# define GST_PT_MASK                X86_PT_MASK
     61# define GST_CR3_PAGE_MASK          X86_CR3_PAGE_MASK
    6062#else
    6163# define GSTPT                      X86PTPAE
     
    7072# define GST_BIG_PAGE_OFFSET_MASK   X86_PAGE_2M_OFFSET_MASK
    7173# define GST_PDE_PG_MASK            X86_PDE_PAE_PG_MASK
    72 # define GST_PDE4M_PG_MASK          X86_PDE4M_PAE_PG_MASK
     74# define GST_PDE4M_PG_MASK          X86_PDE2M_PAE_PG_MASK
    7375# define GST_PD_SHIFT               X86_PD_PAE_SHIFT
    7476# define GST_PD_MASK                X86_PD_PAE_MASK
     
    7779# define GST_PT_SHIFT               X86_PT_PAE_SHIFT
    7880# define GST_PT_MASK                X86_PT_PAE_MASK
     81# define GST_CR3_PAGE_MASK          X86_CR3_PAE_PAGE_MASK
    7982#endif
    8083
     
    286289             * 4MB Page table
    287290             */
    288             Pde.u = (Pde.u & (fMask | ((fMask & X86_PTE_PAT) << X86_PDE4M_PAT_SHIFT) | X86_PDE4M_PAE_PG_MASK | X86_PDE4M_PS)) /** @todo pse36 */
     291            Pde.u = (Pde.u & (fMask | ((fMask & X86_PTE_PAT) << X86_PDE4M_PAT_SHIFT) | GST_PDE4M_PG_MASK | X86_PDE4M_PS)) /** @todo pse36 */
    289292                  | (fFlags & ~GST_PTE_PG_MASK)
    290293                  | ((fFlags & X86_PTE_PAT) << X86_PDE4M_PAT_SHIFT);
  • trunk/src/VBox/VMM/VMMAll/PGMAllPhys.cpp

    r7642 r7655  
    10181018    {
    10191019        /** @todo long mode! */
     1020        Assert(PGMGetGuestMode(pVM) < PGMMODE_AMD64);
     1021
    10201022        PX86PDPTR pPdptr;
    10211023        rc = PGM_GCPHYS_2_PTR(pVM, cr3 & X86_CR3_PAE_PAGE_MASK, &pPdptr);
     
    10341036                        if ((fFlags & X86_CR4_PSE) && Pde.b.u1Size)
    10351037                        {   /* (big page) */
    1036                             rc = PGMPhysGCPhys2HCPtr(pVM, (Pde.u & X86_PDE4M_PAE_PG_MASK) | ((RTGCUINTPTR)GCPtr & X86_PAGE_4M_OFFSET_MASK), 1 /* we always stay within one page */, pHCPtr);
     1038                            rc = PGMPhysGCPhys2HCPtr(pVM, (Pde.u & X86_PDE2M_PAE_PG_MASK) | ((RTGCUINTPTR)GCPtr & X86_PAGE_2M_OFFSET_MASK), 1 /* we always stay within one page */, pHCPtr);
    10371039                        }
    10381040                        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