VirtualBox

Changeset 13203

Show
Ignore:
Timestamp:
10/13/08 12:02:04 (3 months ago)
Author:
vboxsync
Message:

Missing shadow cases for EPT.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/include/VBox/hwacc_vmx.h

    r13197 r13203  
    235235    uint64_t    u1IgnorePAT     : 1; 
    236236    /** Big page (must be 1 here). */ 
    237     uint64_t    u1Big           : 1; 
     237    uint64_t    u1Size          : 1; 
    238238    /** Available for software. */ 
    239239    uint64_t    u4Available     : 4; 
  • trunk/src/VBox/VMM/VMMAll/PGMAllBth.h

    r13188 r13203  
    14371437                    PteDst.n.u1IgnorePAT = 1; 
    14381438                    PteDst.n.u3EMT       = VMX_EPT_MEMTYPE_WB; 
    1439                     /* PteDst.n.u1Write = 0 && PteDst.n.u1Big = 0 */ 
     1439                    /* PteDst.n.u1Write = 0 && PteDst.n.u1Size = 0 */ 
    14401440#else 
    14411441                    PteDst.u = (PteSrc.u & ~(X86_PTE_PAE_PG_MASK | X86_PTE_AVL_MASK | X86_PTE_PAT | X86_PTE_PCD | X86_PTE_PWT | X86_PTE_RW)) 
     
    14861486                    PteDst.n.u1IgnorePAT = 1; 
    14871487                    PteDst.n.u3EMT       = VMX_EPT_MEMTYPE_WB; 
    1488                     /* PteDst.n.u1Big = 0 */ 
     1488                    /* PteDst.n.u1Size = 0 */ 
    14891489#else 
    14901490                    PteDst.u = (PteSrc.u & ~(X86_PTE_PAE_PG_MASK | X86_PTE_AVL_MASK | X86_PTE_PAT | X86_PTE_PCD | X86_PTE_PWT)) 
  • trunk/src/VBox/VMM/VMMAll/PGMAllShw.h

    r13019 r13203  
    135135PGM_SHW_DECL(int, GetPage)(PVM pVM, RTGCUINTPTR GCPtr, uint64_t *pfFlags, PRTHCPHYS pHCPhys) 
    136136{ 
    137 #if PGM_SHW_TYPE == PGM_TYPE_NESTED || PGM_SHW_TYPE == PGM_TYPE_EPT 
     137#if PGM_SHW_TYPE == PGM_TYPE_NESTED 
    138138    return VERR_PAGE_TABLE_NOT_PRESENT; 
    139139 
     
    181181    const unsigned iPd = (GCPtr >> X86_PD_PAE_SHIFT) & X86_PD_PAE_MASK; 
    182182    X86PDEPAE      Pde = CTXMID(pVM->pgm.s.ap,PaePDs)[iPDPT]->a[iPd]; 
    183  
     183# elif PGM_SHW_TYPE == PGM_TYPE_EPT 
     184    const unsigned  iPd = ((GCPtr >> SHW_PD_SHIFT) & SHW_PD_MASK); 
     185    PEPTPD          pPDDst; 
     186    EPTPDE          Pde; 
     187 
     188    int rc = PGMShwGetEPTPDPtr(pVM, GCPtr, NULL, &pPDDst); 
     189    if (rc != VINF_SUCCESS) 
     190    { 
     191        AssertRC(rc); 
     192        return rc; 
     193    } 
     194    Assert(pPDDst); 
     195    Pde = pPDDst->a[iPd]; 
    184196# else /* PGM_TYPE_32BIT */ 
    185197    const unsigned iPd = (GCPtr >> X86_PD_SHIFT) & X86_PD_MASK; 
     
    203215    else /* mapping: */ 
    204216    { 
    205 # if PGM_SHW_TYPE == PGM_TYPE_AMD64 
     217# if    PGM_SHW_TYPE == PGM_TYPE_AMD64 \ 
     218     || PGM_SHW_TYPE == PGM_TYPE_EPT 
    206219        AssertFailed(); /* can't happen */ 
    207220# else 
     
    242255 
    243256    return VINF_SUCCESS; 
    244 #endif /* PGM_SHW_TYPE != PGM_TYPE_NESTED && PGM_SHW_TYPE != PGM_TYPE_EPT */ 
     257#endif /* PGM_SHW_TYPE != PGM_TYPE_NESTED */ 
    245258} 
    246259 
     
    262275PGM_SHW_DECL(int, ModifyPage)(PVM pVM, RTGCUINTPTR GCPtr, size_t cb, uint64_t fFlags, uint64_t fMask) 
    263276{ 
    264 # if PGM_SHW_TYPE == PGM_TYPE_NESTED || PGM_SHW_TYPE == PGM_TYPE_EPT 
     277# if PGM_SHW_TYPE == PGM_TYPE_NESTED 
    265278    return VERR_PAGE_TABLE_NOT_PRESENT; 
    266279 
     
    307320        X86PDEPAE Pde = CTXMID(pVM->pgm.s.ap,PaePDs)[iPDPT]->a[iPd]; 
    308321 
     322# elif PGM_SHW_TYPE == PGM_TYPE_EPT 
     323        const unsigned  iPd = ((GCPtr >> SHW_PD_SHIFT) & SHW_PD_MASK); 
     324        PEPTPD          pPDDst; 
     325        EPTPDE          Pde; 
     326 
     327        rc = PGMShwGetEPTPDPtr(pVM, GCPtr, NULL, &pPDDst); 
     328        if (rc != VINF_SUCCESS) 
     329        { 
     330            AssertRC(rc); 
     331            return rc; 
     332        } 
     333        Assert(pPDDst); 
     334        Pde = pPDDst->a[iPd]; 
    309335# else /* PGM_TYPE_32BIT */ 
    310336        const unsigned iPd = (GCPtr >> X86_PD_SHIFT) & X86_PD_MASK; 
     
    329355                pPT->a[iPTE].u = (pPT->a[iPTE].u & (fMask | SHW_PTE_PG_MASK)) | (fFlags & ~SHW_PTE_PG_MASK); 
    330356                Assert(pPT->a[iPTE].n.u1Present); 
     357# if PGM_SHW_TYPE == PGM_TYPE_EPT 
     358                HWACCMInvalidatePhysPage(pVM, (RTGCPHYS)GCPtr); 
     359# else 
    331360                PGM_INVL_PG(GCPtr); 
     361# endif 
    332362            } 
    333363 
     
    340370        } 
    341371    } 
    342 # endif /* PGM_SHW_TYPE != PGM_TYPE_NESTED && PGM_SHW_TYPE != PGM_TYPE_EPT */ 
     372# endif /* PGM_SHW_TYPE != PGM_TYPE_NESTED */ 
    343373} 
    344374 

© 2008 Sun Microsystems, Inc.
ContactPrivacy policy