VirtualBox

Ignore:
Timestamp:
Feb 16, 2009 4:42:17 PM (16 years ago)
Author:
vboxsync
Message:

VBOX_WITH_PGMPOOL_PAGING_ONLY: SyncCR3 fixes

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/VMMAll/PGMAllBth.h

    r16798 r16800  
    34293429#   endif
    34303430                {
    3431 #   ifndef VBOX_WITH_PGMPOOL_PAGING_ONLY
    34323431                    if (pVM->pgm.s.fMappingsFixed)
    34333432                    {
     
    34363435                        Assert(PGM_GST_TYPE == PGM_TYPE_32BIT || (iPD + cPTs - 1) / X86_PG_PAE_ENTRIES == iPD / X86_PG_PAE_ENTRIES);
    34373436                        iPD += cPTs - 1;
    3438 #    if PGM_SHW_TYPE != PGM_GST_TYPE /* SHW==PAE && GST==32BIT */
     3437#   if PGM_SHW_TYPE != PGM_GST_TYPE /* SHW==PAE && GST==32BIT */
    34393438                        pPDEDst = pgmShwGetPaePDEPtr(&pVM->pgm.s, (uint32_t)(iPD + 1) << GST_PD_SHIFT);
    3440 #    else
     3439#   else
    34413440                        pPDEDst += cPTs;
    3442 #    endif
     3441#   endif
    34433442                        pMapping = pMapping->CTX_SUFF(pNext);
    34443443                        iPdNoMapping = pMapping ? pMapping->GCPtr >> GST_PD_SHIFT : ~0U;
    34453444                        continue;
    34463445                    }
    3447 #   endif /* !VBOX_WITH_PGMPOOL_PAGING_ONLY */
    34483446#   ifdef IN_RING3
    34493447#    if PGM_GST_TYPE == PGM_TYPE_32BIT
     
    34713469#  endif /* (PGM_GST_TYPE != PGM_TYPE_32BIT && PGM_GST_TYPE != PGM_TYPE_PAE) || PGM_WITHOUT_MAPPINGS */
    34723470
    3473 #  ifndef VBOX_WITH_PGMPOOL_PAGING_ONLY
     3471#  ifdef VBOX_WITH_PGMPOOL_PAGING_ONLY
     3472                /* advance */
     3473#   if PGM_SHW_TYPE == PGM_TYPE_PAE && PGM_GST_TYPE == PGM_TYPE_32BIT
     3474                pPDEDst += 2;
     3475#   else
     3476                pPDEDst++;
     3477#   endif
     3478#  else
    34743479                /*
    34753480                 * Sync page directory entry.
     
    34793484                 * it's actually used.
    34803485                 */
    3481 if PGM_SHW_TYPE == PGM_TYPE_PAE && PGM_GST_TYPE == PGM_TYPE_32BIT
     3486 if PGM_SHW_TYPE == PGM_TYPE_PAE && PGM_GST_TYPE == PGM_TYPE_32BIT
    34823487                for (unsigned i = 0, iPdShw = iPD * 2; i < 2; i++, iPdShw++) /* pray that the compiler unrolls this */
    3483 elif PGM_GST_TYPE == PGM_TYPE_PAE
     3488 elif PGM_GST_TYPE == PGM_TYPE_PAE
    34843489                const unsigned iPdShw = iPD + iPdpt * X86_PG_PAE_ENTRIES; NOREF(iPdShw);
    3485 else
     3490 else
    34863491                const unsigned iPdShw = iPD; NOREF(iPdShw);
    3487 endif
     3492 endif
    34883493                {
    34893494                    SHWPDE PdeDst = *pPDEDst;
     
    34963501                        {
    34973502                            GCPhys = PdeSrc.u & GST_PDE_PG_MASK;
    3498 if PGM_SHW_TYPE == PGM_TYPE_PAE && PGM_GST_TYPE == PGM_TYPE_32BIT
     3503 if PGM_SHW_TYPE == PGM_TYPE_PAE && PGM_GST_TYPE == PGM_TYPE_32BIT
    34993504                            /* Select the right PDE as we're emulating a 4kb page table with 2 shadow page tables. */
    35003505                            GCPhys |= i * (PAGE_SIZE / 2);
    3501 endif
     3506 endif
    35023507                        }
    35033508                        else
    35043509                        {
    35053510                            GCPhys = GST_GET_PDE_BIG_PG_GCPHYS(PdeSrc);
    3506 if PGM_SHW_TYPE == PGM_TYPE_PAE && PGM_GST_TYPE == PGM_TYPE_32BIT
     3511 if PGM_SHW_TYPE == PGM_TYPE_PAE && PGM_GST_TYPE == PGM_TYPE_32BIT
    35073512                            /* Select the right PDE as we're emulating a 4MB page directory with two 2 MB shadow PDEs.*/
    35083513                            GCPhys |= i * X86_PAGE_2M_SIZE;
    3509 endif
     3514 endif
    35103515                        }
    35113516
     
    35153520                                || (   !fGlobal
    35163521                                    && (   false
    3517 ifdef PGM_SKIP_GLOBAL_PAGEDIRS_ON_NONGLOBAL_FLUSH
     3522 ifdef PGM_SKIP_GLOBAL_PAGEDIRS_ON_NONGLOBAL_FLUSH
    35183523                                        || (   (PdeSrc.u & (X86_PDE4M_PS | X86_PDE4M_G)) == (X86_PDE4M_PS | X86_PDE4M_G)
    35193524                                            && (cr4 & (X86_CR4_PGE | X86_CR4_PSE)) == (X86_CR4_PGE | X86_CR4_PSE)) /* global 2/4MB page. */
    35203525                                        || (  !pShwPage->fSeenNonGlobal
    35213526                                            && (cr4 & X86_CR4_PGE))
    3522 endif
     3527 endif
    35233528                                        )
    35243529                                    )
     
    35313536                        )
    35323537                        {
    3533 ifdef VBOX_WITH_STATISTICS
     3538 ifdef VBOX_WITH_STATISTICS
    35343539                            if (   !fGlobal
    35353540                                && (PdeSrc.u & (X86_PDE4M_PS | X86_PDE4M_G)) == (X86_PDE4M_PS | X86_PDE4M_G)
     
    35403545                            else
    35413546                                MY_STAM_COUNTER_INC(&pVM->pgm.s.CTX_MID_Z(Stat,SyncCR3DstCacheHit));
    3542 endif /* VBOX_WITH_STATISTICS */
     3547 endif /* VBOX_WITH_STATISTICS */
    35433548    /** @todo a replacement strategy isn't really needed unless we're using a very small pool < 512 pages.
    35443549    * The whole ageing stuff should be put in yet another set of #ifdefs. For now, let's just skip it. */
     
    35683573#  endif
    35693574            {
    3570 #  ifndef VBOX_WITH_PGMPOOL_PAGING_ONLY
    35713575                /*
    35723576                 * Check if there is any page directory to mark not present here.
    35733577                 */
     3578#  ifdef VBOX_WITH_PGMPOOL_PAGING_ONLY
     3579                /* advance */
     3580#   if PGM_SHW_TYPE == PGM_TYPE_PAE && PGM_GST_TYPE == PGM_TYPE_32BIT
     3581                pPDEDst += 2;
     3582#   else
     3583                pPDEDst++;
     3584#   endif
     3585#  else
    35743586#   if PGM_SHW_TYPE == PGM_TYPE_PAE && PGM_GST_TYPE == PGM_TYPE_32BIT
    35753587                for (unsigned i = 0, iPdShw = iPD * 2; i < 2; i++, iPdShw++) /* pray that the compiler unrolls this */
     
    36073619                }
    36083620                else
    3609 #   endif
     3621#   endif /* !VBOX_WITH_PGMPOOL_PAGING_ONLY */
    36103622                {
    36113623                    /*
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