VirtualBox

Changeset 14010 in vbox for trunk/src/VBox/VMM


Ignore:
Timestamp:
Nov 10, 2008 1:38:57 PM (16 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
39063
Message:

#1865: PGM - one more down.

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

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/PGMInternal.h

    r14002 r14010  
    20952095    /** The Physical Address (HC) of the Page Map Level 4 table. */
    20962096    RTHCPHYS                        HCPhysPaePML4;
    2097 #if 0
    20982097    /** The pgm pool page descriptor for the current active CR3 - R3 Ptr. */
    20992098    R3PTRTYPE(PPGMPOOLPAGE)         pShwAmd64CR3R3;
    21002099    /** The pgm pool page descriptor for the current active CR3 - R0 Ptr. */
    21012100    R0PTRTYPE(PPGMPOOLPAGE)         pShwAmd64CR3R0;
    2102 #else
    2103     /** The pgm pool page descriptor for the current active CR3. */
    2104 #if 0///@todo def VBOX_WITH_2X_4GB_ADDR_SPACE
    2105     R3PTRTYPE(PPGMPOOLPAGE)         pHCShwAmd64CR3;
    2106 #else
    2107     R3R0PTRTYPE(PPGMPOOLPAGE)       pHCShwAmd64CR3;
    2108 #endif
    2109 #endif
    21102101    /** @}*/
    21112102
  • trunk/src/VBox/VMM/VMMAll/PGMAll.cpp

    r13993 r14010  
    931931             *        trustworthy? (Remove pgmGstGetLongModePML4E if pGstPml4e and pGstPdpe
    932932             *        are fine.) */
    933             Assert(pVM->pgm.s.pHCShwAmd64CR3);
     933            Assert(pVM->pgm.s.CTX_SUFF(pShwAmd64CR3));
    934934            Pml4eGst.u = 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.pHCShwAmd64CR3->idx, iPml4, &pShwPage);
     937                              PGMPOOLKIND_64BIT_PDPT_FOR_64BIT_PDPT, pVM->pgm.s.CTX_SUFF(pShwAmd64CR3)->idx, iPml4, &pShwPage);
    938938        }
    939939        else
  • trunk/src/VBox/VMM/VMMAll/PGMAllBth.h

    r13991 r14010  
    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.pHCShwAmd64CR3->idx, iPml4);
     1023        pgmPoolFreeByPage(pPool, pShwPdpt, pVM->pgm.s.CTX_SUFF(pShwAmd64CR3)->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.pHCShwAmd64CR3->idx, iPml4);
     1037        pgmPoolFreeByPage(pPool, pShwPdpt, pVM->pgm.s.CTX_SUFF(pShwAmd64CR3)->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.pHCShwAmd64CR3->idx, iPml4);
     1049        pgmPoolFreeByPage(pPool, pShwPdpt, pVM->pgm.s.CTX_SUFF(pShwAmd64CR3)->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

    r13991 r14010  
    514514            {
    515515                PPGMPOOL pPool = pVM->pgm.s.CTX_SUFF(pPool);
    516                 if (pVM->pgm.s.pHCShwAmd64CR3)
     516                if (pVM->pgm.s.CTX_SUFF(pShwAmd64CR3))
    517517                {
    518518                    /* It might have been freed already by a pool flush (see e.g. PGMR3MappingsUnfix). */
    519                     if (pVM->pgm.s.pHCShwAmd64CR3->enmKind != PGMPOOLKIND_FREE)
    520                         pgmPoolFreeByPage(pPool, pVM->pgm.s.pHCShwAmd64CR3, PGMPOOL_IDX_AMD64_CR3, pVM->pgm.s.pHCShwAmd64CR3->GCPhys >> PAGE_SHIFT);
    521                     pVM->pgm.s.pHCShwAmd64CR3 = 0;
    522                     pVM->pgm.s.pShwPaePml4R3  = 0;
     519                    if (pVM->pgm.s.CTX_SUFF(pShwAmd64CR3)->enmKind != PGMPOOLKIND_FREE)
     520                        pgmPoolFreeByPage(pPool, pVM->pgm.s.CTX_SUFF(pShwAmd64CR3), PGMPOOL_IDX_AMD64_CR3, pVM->pgm.s.CTX_SUFF(pShwAmd64CR3)->GCPhys >> PAGE_SHIFT);
     521                    pVM->pgm.s.CTX_SUFF(pShwAmd64CR3) = 0;
     522                    pVM->pgm.s.pShwPaePml4R3          = 0;
    523523#  ifndef VBOX_WITH_2X_4GB_ADDR_SPACE
    524                     pVM->pgm.s.pShwPaePml4R0  = 0;
     524                    pVM->pgm.s.pShwPaePml4R0          = 0;
    525525#  endif
    526                     pVM->pgm.s.HCPhysPaePML4  = 0;
     526                    pVM->pgm.s.HCPhysPaePML4          = 0;
    527527                }
    528528
    529529                Assert(!(GCPhysCR3 >> (PAGE_SHIFT + 32)));
    530530l_try_again:
    531                 rc = pgmPoolAlloc(pVM, GCPhysCR3, PGMPOOLKIND_64BIT_PML4_FOR_64BIT_PML4, PGMPOOL_IDX_AMD64_CR3, GCPhysCR3 >> PAGE_SHIFT, &pVM->pgm.s.pHCShwAmd64CR3);
     531                rc = pgmPoolAlloc(pVM, GCPhysCR3, PGMPOOLKIND_64BIT_PML4_FOR_64BIT_PML4, PGMPOOL_IDX_AMD64_CR3, GCPhysCR3 >> PAGE_SHIFT, &pVM->pgm.s.CTX_SUFF(pShwAmd64CR3));
    532532                if (rc == VERR_PGM_POOL_FLUSHED)
    533533                {
     
    538538                    goto l_try_again;
    539539                }
    540                 pVM->pgm.s.pShwPaePml4R3 = (R3PTRTYPE(PX86PML4))PGMPOOL_PAGE_2_PTR(pPool->CTX_SUFF(pVM), pVM->pgm.s.pHCShwAmd64CR3);
     540#  ifdef IN_RING0
     541                pVM->pgm.s.pShwAmd64CR3R3 = MMHyperCCToR3(pVM, pVM->pgm.s.CTX_SUFF(pShwAmd64CR3));
     542#  else
     543                pVM->pgm.s.pShwAmd64CR3R0 = MMHyperCCToR0(pVM, pVM->pgm.s.CTX_SUFF(pShwAmd64CR3));
     544#  endif
     545                pVM->pgm.s.pShwPaePml4R3 = (R3PTRTYPE(PX86PML4))PGMPOOL_PAGE_2_PTR(pPool->CTX_SUFF(pVM), pVM->pgm.s.CTX_SUFF(pShwAmd64CR3));
    541546#  ifndef VBOX_WITH_2X_4GB_ADDR_SPACE
    542                 pVM->pgm.s.pShwPaePml4R0 = (R0PTRTYPE(PX86PML4))PGMPOOL_PAGE_2_PTR(pPool->CTX_SUFF(pVM), pVM->pgm.s.pHCShwAmd64CR3);
     547                pVM->pgm.s.pShwPaePml4R0 = (R0PTRTYPE(PX86PML4))PGMPOOL_PAGE_2_PTR(pPool->CTX_SUFF(pVM), pVM->pgm.s.CTX_SUFF(pShwAmd64CR3));
    543548#  endif
    544                 pVM->pgm.s.HCPhysPaePML4 = pVM->pgm.s.pHCShwAmd64CR3->Core.Key;
     549                pVM->pgm.s.HCPhysPaePML4 = pVM->pgm.s.CTX_SUFF(pShwAmd64CR3)->Core.Key;
    545550            }
    546551# endif
     
    606611# endif
    607612        pVM->pgm.s.HCPhysPaePML4 = 0;
    608         if (pVM->pgm.s.pHCShwAmd64CR3)
     613        if (pVM->pgm.s.CTX_SUFF(pShwAmd64CR3))
    609614        {
    610615            PPGMPOOL pPool = pVM->pgm.s.CTX_SUFF(pPool);
    611             pgmPoolFreeByPage(pPool, pVM->pgm.s.pHCShwAmd64CR3, PGMPOOL_IDX_AMD64_CR3, pVM->pgm.s.pHCShwAmd64CR3->GCPhys >> PAGE_SHIFT);
    612             pVM->pgm.s.pHCShwAmd64CR3 = 0;
     616            pgmPoolFreeByPage(pPool, pVM->pgm.s.CTX_SUFF(pShwAmd64CR3), PGMPOOL_IDX_AMD64_CR3, pVM->pgm.s.CTX_SUFF(pShwAmd64CR3)->GCPhys >> PAGE_SHIFT);
     617            pVM->pgm.s.pShwAmd64CR3R3 = 0;
     618            pVM->pgm.s.pShwAmd64CR3R0 = 0;
    613619        }
    614620    }
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