VirtualBox

Changeset 16172 in vbox


Ignore:
Timestamp:
Jan 22, 2009 3:09:31 PM (16 years ago)
Author:
vboxsync
Message:

Moved amd64 paging data to unified shadow paging section.

Location:
trunk/src/VBox/VMM
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/PGM.cpp

    r16113 r16172  
    15291529#if HC_ARCH_BITS == 64
    15301530# ifndef VBOX_WITH_PGMPOOL_PAGING_ONLY
    1531         LogRel(("Debug: HCPhysShw32BitPD=%RHp aHCPhysPaePDs={%RHp,%RHp,%RHp,%RHp} HCPhysShwPaePdpt=%RHp HCPhysShwPaePml4=%RHp\n",
     1531        LogRel(("Debug: HCPhysShw32BitPD=%RHp aHCPhysPaePDs={%RHp,%RHp,%RHp,%RHp} HCPhysShwPaePdpt=%RHp\n",
    15321532                pVM->pgm.s.HCPhysShw32BitPD,
    15331533                pVM->pgm.s.aHCPhysPaePDs[0], pVM->pgm.s.aHCPhysPaePDs[1], pVM->pgm.s.aHCPhysPaePDs[2], pVM->pgm.s.aHCPhysPaePDs[3],
    1534                 pVM->pgm.s.HCPhysShwPaePdpt,
    1535                 pVM->pgm.s.HCPhysShwPaePml4));
     1534                pVM->pgm.s.HCPhysShwPaePdpt));
    15361535# endif
    15371536        LogRel(("Debug: HCPhysInterPD=%RHp HCPhysInterPaePDPT=%RHp HCPhysInterPaePML4=%RHp\n",
  • trunk/src/VBox/VMM/PGMInternal.h

    r16045 r16172  
    22272227    /** @} */
    22282228
    2229     /** @name 32-bit Shadow Paging
     2229    /** @name Shadow paging
    22302230     * @{ */
    2231 #ifdef VBOX_WITH_PGMPOOL_PAGING_ONLY
     2231    /** The root page table - R3 Ptr. */
     2232    R3PTRTYPE(void *)               pShwRootR3;
     2233# ifndef VBOX_WITH_2X_4GB_ADDR_SPACE
     2234    /** The root page table - R0 Ptr. */
     2235    R0PTRTYPE(void *)               pShwRootR0;
     2236# endif
    22322237    /** The Physical Address (HC) of the current active shadow CR3. */
    22332238    RTHCPHYS                        HCPhysShwCR3;
     
    22412246    RTRCPTR                         alignment6; /**< structure size alignment. */
    22422247# endif
    2243 #else
     2248    /** @} */
     2249#ifndef VBOX_WITH_PGMPOOL_PAGING_ONLY
     2250    /** @name 32-bit Shadow Paging
     2251     * @{ */
    22442252    /** The 32-Bit PD - R3 Ptr. */
    22452253    R3PTRTYPE(PX86PD)               pShw32BitPdR3;
     
    22842292    RTRCPTR                         alignment5; /**< structure size alignment. */
    22852293# endif
    2286 
    2287     /** @name AMD64 Shadow Paging
    2288      * Extends PAE Paging.
    2289      * @{ */
    2290     /** The Page Map Level 4 table - R3 Ptr. */
    2291     R3PTRTYPE(PX86PML4)             pShwPaePml4R3;
    2292 # ifndef VBOX_WITH_2X_4GB_ADDR_SPACE
    2293     /** The Page Map Level 4 table - R0 Ptr. */
    2294     R0PTRTYPE(PX86PML4)             pShwPaePml4R0;
    2295 # endif
    2296     /** The Physical Address (HC) of the Page Map Level 4 table. */
    2297     RTHCPHYS                        HCPhysShwPaePml4;
    2298     /** The pgm pool page descriptor for the current active CR3 - R3 Ptr. */
    2299     R3PTRTYPE(PPGMPOOLPAGE)         pShwAmd64CR3R3;
    2300     /** The pgm pool page descriptor for the current active CR3 - R0 Ptr. */
    2301     R0PTRTYPE(PPGMPOOLPAGE)         pShwAmd64CR3R0;
    2302     /** @}*/
    23032294
    23042295    /** @name Nested Shadow Paging
     
    43094300    return pShwPml4;
    43104301# else
    4311     Assert(pPGM->CTX_SUFF(pShwPaePml4));
    4312     return pPGM->CTX_SUFF(pShwPaePml4);
     4302    Assert(pPGM->CTX_SUFF(pShwRoot));
     4303    return (PX86PML4)pPGM->CTX_SUFF(pShwRoot);
    43134304# endif
    43144305#endif
  • trunk/src/VBox/VMM/PGMShw.h

    r14151 r16172  
    143143    Log(("Enter nested shadow paging mode: root %RHv phys %RHp\n", pVM->pgm.s.pShwNestedRootR3, pVM->pgm.s.HCPhysShwNestedRoot));
    144144    /* In non-nested mode we allocate the PML4 page on-demand; in nested mode we just use our fixed nested paging root. */
    145     pVM->pgm.s.pShwPaePml4R3 = (R3PTRTYPE(PX86PML4))pVM->pgm.s.pShwNestedRootR3;
     145    pVM->pgm.s.pShwRootR3 = (R3PTRTYPE(void *))pVM->pgm.s.pShwNestedRootR3;
    146146# ifndef VBOX_WITH_2X_4GB_ADDR_SPACE
    147     pVM->pgm.s.pShwPaePml4R0 = (R0PTRTYPE(PX86PML4))pVM->pgm.s.pShwNestedRootR0;
     147    pVM->pgm.s.pShwRootR0 = (R0PTRTYPE(void *))pVM->pgm.s.pShwNestedRootR0;
    148148# endif
    149     pVM->pgm.s.HCPhysShwPaePml4 = pVM->pgm.s.HCPhysShwNestedRoot;
     149    pVM->pgm.s.HCPhysShwCR3 = pVM->pgm.s.HCPhysShwNestedRoot;
    150150#endif
    151151    return VINF_SUCCESS;
     
    177177#if PGM_SHW_TYPE == PGM_TYPE_NESTED
    178178    Assert(HWACCMIsNestedPagingActive(pVM));
    179     pVM->pgm.s.pShwPaePml4R3 = 0;
     179    pVM->pgm.s.pShwRootR3 = 0;
    180180# ifndef VBOX_WITH_2X_4GB_ADDR_SPACE
    181     pVM->pgm.s.pShwPaePml4R0 = 0;
     181    pVM->pgm.s.pShwRootR0 = 0;
    182182# endif
    183     pVM->pgm.s.HCPhysShwPaePml4 = 0;
     183    pVM->pgm.s.HCPhysShwCR3 = 0;
    184184    Log(("Leave nested shadow paging mode\n"));
    185185#endif
  • trunk/src/VBox/VMM/VMMAll/PGMAll.cpp

    r15990 r16172  
    931931             *        trustworthy? (Remove pgmGstGetLongModePML4E if pGstPml4e and pGstPdpe
    932932             *        are fine.) */
    933             Assert(pVM->pgm.s.CTX_SUFF(pShwAmd64CR3));
     933            Assert(pVM->pgm.s.CTX_SUFF(pShwPageCR3));
    934934            Pml4eGst = pgmGstGetLongModePML4E(&pVM->pgm.s, iPml4);
    935935
    936936            rc = pgmPoolAlloc(pVM, Pml4eGst.u & X86_PML4E_PG_MASK,
    937                               PGMPOOLKIND_64BIT_PDPT_FOR_64BIT_PDPT, pVM->pgm.s.CTX_SUFF(pShwAmd64CR3)->idx, iPml4, &pShwPage);
     937                              PGMPOOLKIND_64BIT_PDPT_FOR_64BIT_PDPT, pVM->pgm.s.CTX_SUFF(pShwPageCR3)->idx, iPml4, &pShwPage);
    938938        }
    939939        else
     
    12751275        case PGMMODE_AMD64:
    12761276        case PGMMODE_AMD64_NX:
    1277             return pVM->pgm.s.HCPhysShwPaePml4;
     1277            return pVM->pgm.s.HCPhysShwCR3;
    12781278
    12791279        case PGMMODE_EPT:
     
    13081308        case PGMMODE_AMD64:
    13091309        case PGMMODE_AMD64_NX:
    1310             return pVM->pgm.s.HCPhysShwPaePml4;
     1310            return pVM->pgm.s.HCPhysShwCR3;
    13111311
    13121312        default:
     
    13571357VMMDECL(RTHCPHYS) PGMGetHyperAmd64CR3(PVM pVM)
    13581358{
    1359     return pVM->pgm.s.HCPhysShwPaePml4;
     1359    return pVM->pgm.s.HCPhysShwCR3;
    13601360}
    13611361
  • trunk/src/VBox/VMM/VMMAll/PGMAllBth.h

    r15410 r16172  
    910910# else /* PGM_SHW_TYPE == PGM_TYPE_AMD64 */
    911911    /* PML4 */
    912     AssertReturn(pVM->pgm.s.pShwPaePml4R3, VERR_INTERNAL_ERROR);
     912    AssertReturn(CTX_SUFF(pVM->pgm.s.pShwRoot), VERR_INTERNAL_ERROR);
    913913
    914914    const unsigned  iPml4     = (GCPtrPage >> X86_PML4_SHIFT) & X86_PML4_MASK;
     
    10211021        LogFlow(("InvalidatePage: Out-of-sync PML4E (P/GCPhys) at %RGv GCPhys=%RGp vs %RGp Pml4eSrc=%RX64 Pml4eDst=%RX64\n",
    10221022                 GCPtrPage, pShwPdpt->GCPhys, GCPhysPdpt, (uint64_t)pPml4eSrc->u, (uint64_t)pPml4eDst->u));
    1023         pgmPoolFreeByPage(pPool, pShwPdpt, pVM->pgm.s.CTX_SUFF(pShwAmd64CR3)->idx, iPml4);
     1023        pgmPoolFreeByPage(pPool, pShwPdpt, pVM->pgm.s.CTX_SUFF(pShwPageCR3)->idx, iPml4);
    10241024        pPml4eDst->u = 0;
    10251025        STAM_COUNTER_INC(&pVM->pgm.s.CTX_MID_Z(Stat,InvalidatePagePDNPs));
     
    10351035        LogFlow(("InvalidatePage: Out-of-sync PML4E at %RGv Pml4eSrc=%RX64 Pml4eDst=%RX64\n",
    10361036                 GCPtrPage, (uint64_t)pPml4eSrc->u, (uint64_t)pPml4eDst->u));
    1037         pgmPoolFreeByPage(pPool, pShwPdpt, pVM->pgm.s.CTX_SUFF(pShwAmd64CR3)->idx, iPml4);
     1037        pgmPoolFreeByPage(pPool, pShwPdpt, pVM->pgm.s.CTX_SUFF(pShwPageCR3)->idx, iPml4);
    10381038        pPml4eDst->u = 0;
    10391039        STAM_COUNTER_INC(&pVM->pgm.s.CTX_MID_Z(Stat,InvalidatePagePDOutOfSync));
     
    10471047        LogFlow(("InvalidatePage: Out-of-sync PML4E (A) at %RGv Pml4eSrc=%RX64 Pml4eDst=%RX64\n",
    10481048                 GCPtrPage, (uint64_t)pPml4eSrc->u, (uint64_t)pPml4eDst->u));
    1049         pgmPoolFreeByPage(pPool, pShwPdpt, pVM->pgm.s.CTX_SUFF(pShwAmd64CR3)->idx, iPml4);
     1049        pgmPoolFreeByPage(pPool, pShwPdpt, pVM->pgm.s.CTX_SUFF(pShwPageCR3)->idx, iPml4);
    10501050        pPml4eDst->u = 0;
    10511051        STAM_COUNTER_INC(&pVM->pgm.s.CTX_MID_Z(Stat,InvalidatePagePDNAs));
  • trunk/src/VBox/VMM/VMMAll/PGMAllGst.h

    r15410 r16172  
    517517                /** @todo Move this into PGMAllBth.h. */
    518518                PPGMPOOL pPool = pVM->pgm.s.CTX_SUFF(pPool);
    519                 if (pVM->pgm.s.CTX_SUFF(pShwAmd64CR3))
     519                if (pVM->pgm.s.CTX_SUFF(pShwPageCR3))
    520520                {
    521521                    /* It might have been freed already by a pool flush (see e.g. PGMR3MappingsUnfix). */
    522522                    /** @todo Coordinate this better with the pool. */
    523                     if (pVM->pgm.s.CTX_SUFF(pShwAmd64CR3)->enmKind != PGMPOOLKIND_FREE)
    524                         pgmPoolFreeByPage(pPool, pVM->pgm.s.CTX_SUFF(pShwAmd64CR3), PGMPOOL_IDX_AMD64_CR3, pVM->pgm.s.CTX_SUFF(pShwAmd64CR3)->GCPhys >> PAGE_SHIFT);
    525                     pVM->pgm.s.pShwAmd64CR3R3  = 0;
    526                     pVM->pgm.s.pShwAmd64CR3R0  = 0;
    527                     pVM->pgm.s.pShwPaePml4R3    = 0;
     523                    if (pVM->pgm.s.CTX_SUFF(pShwPageCR3)->enmKind != PGMPOOLKIND_FREE)
     524                        pgmPoolFreeByPage(pPool, pVM->pgm.s.CTX_SUFF(pShwPageCR3), PGMPOOL_IDX_AMD64_CR3, pVM->pgm.s.CTX_SUFF(pShwPageCR3)->GCPhys >> PAGE_SHIFT);
     525                    pVM->pgm.s.pShwPageCR3R3 = 0;
     526                    pVM->pgm.s.pShwPageCR3R0 = 0;
     527                    pVM->pgm.s.pShwRootR3    = 0;
    528528#  ifndef VBOX_WITH_2X_4GB_ADDR_SPACE
    529                     pVM->pgm.s.pShwPaePml4R0    = 0;
     529                    pVM->pgm.s.pShwRootR0    = 0;
    530530#  endif
    531                     pVM->pgm.s.HCPhysShwPaePml4 = 0;
     531                    pVM->pgm.s.HCPhysShwCR3 = 0;
    532532                }
    533533
    534534                Assert(!(GCPhysCR3 >> (PAGE_SHIFT + 32)));
    535                 rc = pgmPoolAlloc(pVM, GCPhysCR3, PGMPOOLKIND_64BIT_PML4_FOR_64BIT_PML4, PGMPOOL_IDX_AMD64_CR3, GCPhysCR3 >> PAGE_SHIFT, &pVM->pgm.s.CTX_SUFF(pShwAmd64CR3));
     535                rc = pgmPoolAlloc(pVM, GCPhysCR3, PGMPOOLKIND_64BIT_PML4_FOR_64BIT_PML4, PGMPOOL_IDX_AMD64_CR3, GCPhysCR3 >> PAGE_SHIFT, &pVM->pgm.s.CTX_SUFF(pShwPageCR3));
    536536                if (rc == VERR_PGM_POOL_FLUSHED)
    537537                {
     
    542542                AssertRCReturn(rc, rc);
    543543#  ifdef IN_RING0
    544                 pVM->pgm.s.pShwAmd64CR3R3 = MMHyperCCToR3(pVM, pVM->pgm.s.CTX_SUFF(pShwAmd64CR3));
     544                pVM->pgm.s.pShwPageCR3R3 = MMHyperCCToR3(pVM, pVM->pgm.s.CTX_SUFF(pShwPageCR3));
    545545#  else
    546                 pVM->pgm.s.pShwAmd64CR3R0 = MMHyperCCToR0(pVM, pVM->pgm.s.CTX_SUFF(pShwAmd64CR3));
     546                pVM->pgm.s.pShwPageCR3R0 = MMHyperCCToR0(pVM, pVM->pgm.s.CTX_SUFF(pShwPageCR3));
    547547#  endif
    548                 pVM->pgm.s.pShwPaePml4R3 = (R3PTRTYPE(PX86PML4))pVM->pgm.s.CTX_SUFF(pShwAmd64CR3)->pvPageR3;
    549                 Assert(pVM->pgm.s.pShwPaePml4R3);
     548                pVM->pgm.s.pShwRootR3    = (R3PTRTYPE(void *))pVM->pgm.s.CTX_SUFF(pShwPageCR3)->pvPageR3;
     549                Assert(pVM->pgm.s.pShwRootR3);
    550550#  ifndef VBOX_WITH_2X_4GB_ADDR_SPACE
    551                 pVM->pgm.s.pShwPaePml4R0 = (R0PTRTYPE(PX86PML4))PGMPOOL_PAGE_2_PTR(pPool->CTX_SUFF(pVM), pVM->pgm.s.CTX_SUFF(pShwAmd64CR3));
     551                pVM->pgm.s.pShwRootR0    = (R0PTRTYPE(void *))PGMPOOL_PAGE_2_PTR(pPool->CTX_SUFF(pVM), pVM->pgm.s.CTX_SUFF(pShwPageCR3));
    552552#  endif
    553                 pVM->pgm.s.HCPhysShwPaePml4 = pVM->pgm.s.CTX_SUFF(pShwAmd64CR3)->Core.Key;
     553                pVM->pgm.s.HCPhysShwCR3  = pVM->pgm.s.CTX_SUFF(pShwPageCR3)->Core.Key;
    554554                rc = VINF_SUCCESS; /* clear it - pgmPoolAlloc returns hints. */
    555555            }
     
    611611    if (!HWACCMIsNestedPagingActive(pVM))
    612612    {
    613         pVM->pgm.s.pShwPaePml4R3 = 0;
     613        pVM->pgm.s.pShwRootR3 = 0;
    614614# ifndef VBOX_WITH_2X_4GB_ADDR_SPACE
    615         pVM->pgm.s.pShwPaePml4R0 = 0;
    616 # endif
    617         pVM->pgm.s.HCPhysShwPaePml4 = 0;
    618         if (pVM->pgm.s.CTX_SUFF(pShwAmd64CR3))
     615        pVM->pgm.s.pShwRootR0 = 0;
     616# endif
     617        pVM->pgm.s.HCPhysShwCR3 = 0;
     618        if (pVM->pgm.s.CTX_SUFF(pShwPageCR3))
    619619        {
    620620            PPGMPOOL pPool = pVM->pgm.s.CTX_SUFF(pPool);
    621             pgmPoolFreeByPage(pPool, pVM->pgm.s.CTX_SUFF(pShwAmd64CR3), PGMPOOL_IDX_AMD64_CR3, pVM->pgm.s.CTX_SUFF(pShwAmd64CR3)->GCPhys >> PAGE_SHIFT);
    622             pVM->pgm.s.pShwAmd64CR3R3 = 0;
    623             pVM->pgm.s.pShwAmd64CR3R0 = 0;
     621            pgmPoolFreeByPage(pPool, pVM->pgm.s.CTX_SUFF(pShwPageCR3), PGMPOOL_IDX_AMD64_CR3, pVM->pgm.s.CTX_SUFF(pShwPageCR3)->GCPhys >> PAGE_SHIFT);
     622            pVM->pgm.s.pShwPageCR3R3 = 0;
     623            pVM->pgm.s.pShwPageCR3R0 = 0;
    624624        }
    625625    }
  • trunk/src/VBox/VMM/testcase/tstVMStructGC.cpp

    r16019 r16172  
    447447    GEN_CHECK_OFF(PGM, pShwPaePdptRC);
    448448    GEN_CHECK_OFF(PGM, HCPhysShwPaePdpt);
    449     GEN_CHECK_OFF(PGM, pShwPaePml4R3);
     449    GEN_CHECK_OFF(PGM, pShwRootR3);
    450450#ifndef VBOX_WITH_2X_4GB_ADDR_SPACE
    451     GEN_CHECK_OFF(PGM, pShwPaePml4R0);
    452 #endif
    453     GEN_CHECK_OFF(PGM, HCPhysShwPaePml4);
     451    GEN_CHECK_OFF(PGM, pShwRootR0);
     452#endif
     453    GEN_CHECK_OFF(PGM, HCPhysShwCR3);
     454    GEN_CHECK_OFF(PGM, pShwPageCR3R3);
     455    GEN_CHECK_OFF(PGM, pShwPageCR3R0);
     456    GEN_CHECK_OFF(PGM, pShwPageCR3RC);
    454457    GEN_CHECK_OFF(PGM, pfnR3ShwRelocate);
    455458    GEN_CHECK_OFF(PGM, pfnR3ShwExit);
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