VirtualBox

Changeset 17259 in vbox for trunk


Ignore:
Timestamp:
Mar 3, 2009 9:12:06 AM (16 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
43607
Message:

Mask fixes for amd64 modes. Map/UnmapCR3 fixes.

File:
1 edited

Legend:

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

    r17215 r17259  
    16731673    int rc = VINF_SUCCESS;
    16741674    RTGCPHYS GCPhysCR3;
    1675     if (    pVM->pgm.s.enmGuestMode == PGMMODE_PAE
    1676         ||  pVM->pgm.s.enmGuestMode == PGMMODE_PAE_NX
    1677         ||  pVM->pgm.s.enmGuestMode == PGMMODE_AMD64
    1678         ||  pVM->pgm.s.enmGuestMode == PGMMODE_AMD64_NX)
     1675    switch (pVM->pgm.s.enmGuestMode)
     1676    {
     1677    case PGMMODE_PAE:
     1678    case PGMMODE_PAE_NX:
    16791679        GCPhysCR3 = (RTGCPHYS)(cr3 & X86_CR3_PAE_PAGE_MASK);
    1680     else
     1680        break;
     1681    case PGMMODE_AMD64:
     1682    case PGMMODE_AMD64_NX:
     1683        GCPhysCR3 = (RTGCPHYS)(cr3 & X86_CR3_AMD64_PAGE_MASK);
     1684        break;
     1685    default:
    16811686        GCPhysCR3 = (RTGCPHYS)(cr3 & X86_CR3_PAGE_MASK);
     1687        break;
     1688    }
     1689
    16821690    if (pVM->pgm.s.GCPhysCR3 != GCPhysCR3)
    16831691    {
    1684 #ifdef VBOX_WITH_PGMPOOL_PAGING_ONLY
    1685         /* Unmap the old CR3 value before activating the new one. */
    1686         rc = PGM_BTH_PFN(UnmapCR3, pVM)(pVM);
    1687         AssertRC(rc);
    1688 #endif
    16891692        RTGCPHYS GCPhysOldCR3 = pVM->pgm.s.GCPhysCR3;
    16901693        pVM->pgm.s.GCPhysCR3  = GCPhysCR3;
     
    17701773    int rc = VINF_SUCCESS;
    17711774    RTGCPHYS GCPhysCR3;
    1772     if (    pVM->pgm.s.enmGuestMode == PGMMODE_PAE
    1773         ||  pVM->pgm.s.enmGuestMode == PGMMODE_PAE_NX
    1774         ||  pVM->pgm.s.enmGuestMode == PGMMODE_AMD64
    1775         ||  pVM->pgm.s.enmGuestMode == PGMMODE_AMD64_NX)
     1775    switch (pVM->pgm.s.enmGuestMode)
     1776    {
     1777    case PGMMODE_PAE:
     1778    case PGMMODE_PAE_NX:
    17761779        GCPhysCR3 = (RTGCPHYS)(cr3 & X86_CR3_PAE_PAGE_MASK);
    1777     else
     1780        break;
     1781    case PGMMODE_AMD64:
     1782    case PGMMODE_AMD64_NX:
     1783        GCPhysCR3 = (RTGCPHYS)(cr3 & X86_CR3_AMD64_PAGE_MASK);
     1784        break;
     1785    default:
    17781786        GCPhysCR3 = (RTGCPHYS)(cr3 & X86_CR3_PAGE_MASK);
     1787        break;
     1788    }
    17791789    if (pVM->pgm.s.GCPhysCR3 != GCPhysCR3)
    17801790    {
     
    18471857        RTGCPHYS GCPhysCR3Old = pVM->pgm.s.GCPhysCR3;
    18481858        RTGCPHYS GCPhysCR3;
    1849         if (    pVM->pgm.s.enmGuestMode == PGMMODE_PAE
    1850             ||  pVM->pgm.s.enmGuestMode == PGMMODE_PAE_NX
    1851             ||  pVM->pgm.s.enmGuestMode == PGMMODE_AMD64
    1852             ||  pVM->pgm.s.enmGuestMode == PGMMODE_AMD64_NX)
     1859        switch (pVM->pgm.s.enmGuestMode)
     1860        {
     1861        case PGMMODE_PAE:
     1862        case PGMMODE_PAE_NX:
    18531863            GCPhysCR3 = (RTGCPHYS)(cr3 & X86_CR3_PAE_PAGE_MASK);
    1854         else
     1864            break;
     1865        case PGMMODE_AMD64:
     1866        case PGMMODE_AMD64_NX:
     1867            GCPhysCR3 = (RTGCPHYS)(cr3 & X86_CR3_AMD64_PAGE_MASK);
     1868            break;
     1869        default:
    18551870            GCPhysCR3 = (RTGCPHYS)(cr3 & X86_CR3_PAGE_MASK);
     1871            break;
     1872        }
    18561873
    18571874#ifdef VBOX_WITH_PGMPOOL_PAGING_ONLY
    18581875        if (pVM->pgm.s.GCPhysCR3 != GCPhysCR3)
    18591876        {
    1860             /* Unmap the old CR3 value before activating the new one. */
    1861             rc = PGM_BTH_PFN(UnmapCR3, pVM)(pVM);
    1862             AssertRC(rc);
    1863         }
    1864 #endif
    1865 
     1877            pVM->pgm.s.GCPhysCR3 = GCPhysCR3;
     1878            rc = PGM_BTH_PFN(MapCR3, pVM)(pVM, GCPhysCR3);
     1879        }
     1880#else
    18661881        pVM->pgm.s.GCPhysCR3 = GCPhysCR3;
    18671882        rc = PGM_BTH_PFN(MapCR3, pVM)(pVM, GCPhysCR3);
     1883#endif
    18681884#ifdef IN_RING3
    18691885        if (rc == VINF_PGM_SYNC_CR3)
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