VirtualBox

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


Ignore:
Timestamp:
Dec 26, 2009 1:08:25 PM (15 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
56271
Message:

PGMAllPhys.cpp: Fixed bug when entering MMIO2 pages into the physical TLB. Reenabled it for all rings.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/VMMAll/PGMAllPhys.cpp

    r25585 r25586  
    4141# include <iprt/thread.h>
    4242#endif
     43
     44
     45/*******************************************************************************
     46*   Defined Constants And Macros                                               *
     47*******************************************************************************/
     48/** Enable the physical TLB. */
     49#define PGM_WITH_PHYS_TLB
    4350
    4451
     
    655662            PPGMRAMRANGE pRam = pgmPhysGetRange(&pVM->pgm.s, GCPhys);
    656663            AssertMsgReturn(pRam || !pRam->pvR3, ("pRam=%p pPage=%R[pgmpage]\n", pRam, pPage), VERR_INTERNAL_ERROR_2);
    657             *ppv = (void *)((uintptr_t)pRam->pvR3 + (GCPhys - pRam->GCPhys));
     664            *ppv = (void *)((uintptr_t)pRam->pvR3 + (GCPhys & ~(RTGCPHYS)PAGE_OFFSET_MASK) - pRam->GCPhys);
    658665        }
    659666        else if (PGM_PAGE_GET_TYPE(pPage) == PGMPAGETYPE_MMIO2_ALIAS_MMIO)
     
    863870        pTlbe->pMap = pMap;
    864871        pTlbe->pv = pv;
     872        Assert(!((uintptr_t)pTlbe->pv & PAGE_OFFSET_MASK));
    865873    }
    866874    else
     
    870878        pTlbe->pv = pPGM->CTXALLSUFF(pvZeroPg);
    871879    }
    872 #ifdef IN_RING0
    873     pTlbe->GCPhys = (GCPhys & X86_PTE_PAE_PG_MASK);
     880#ifdef PGM_WITH_PHYS_TLB
     881    pTlbe->GCPhys = GCPhys & X86_PTE_PAE_PG_MASK;
    874882#else
    875     /* REM already has a TLB of its own; no point in having two
    876      * and keeping both in sync will eliminate any benefit there might be.
    877      */
    878883    pTlbe->GCPhys = NIL_RTGCPHYS;
    879884#endif
     
    914919        pTlbe->pMap = pMap;
    915920        pTlbe->pv = pv;
     921        Assert(!((uintptr_t)pTlbe->pv & PAGE_OFFSET_MASK));
    916922    }
    917923    else
     
    921927        pTlbe->pv = pPGM->CTXALLSUFF(pvZeroPg);
    922928    }
    923 #ifdef IN_RING0
    924     pTlbe->GCPhys = (GCPhys & X86_PTE_PAE_PG_MASK);
     929#ifdef PGM_WITH_PHYS_TLB
     930    pTlbe->GCPhys = GCPhys & X86_PTE_PAE_PG_MASK;
    925931#else
    926     /* REM already has a TLB of its own; no point in having two
    927      * and keeping both in sync will eliminate any benefit there might be.
    928      */
    929932    pTlbe->GCPhys = NIL_RTGCPHYS;
    930933#endif
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