VirtualBox

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


Ignore:
Timestamp:
Sep 2, 2009 2:00:25 PM (15 years ago)
Author:
vboxsync
Message:

Updated pgmpoolcheck

File:
1 edited

Legend:

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

    r22716 r22717  
    645645            int rc = PGM_GCPHYS_2_PTR(pPool->CTX_SUFF(pVM), pPage->GCPhys, &pGstPT); AssertReleaseRC(rc);
    646646
     647            /* Check if any PTEs are out of sync. */
    647648            for (unsigned j = 0; j < RT_ELEMENTS(pShwPT->a); j++)
    648649            {
     
    656657                        pCmdHlp->pfnPrintf(pCmdHlp, NULL, "Pool check: rc=%d idx=%d guest %RX64 shw=%RX64 vs %RHp\n", rc, j, pGstPT->a[j].u, pShwPT->a[j].u, HCPhys);
    657658                    }
    658                     else
    659                     if (    pShwPT->a[j].n.u1Write
     659                }
     660            }
     661
     662            /* Make sure this page table can't be written to from any shadow mapping. */
     663            RTHCPHYS HCPhysPT = -1;
     664            rc = PGMPhysGCPhys2HCPhys(pPool->CTX_SUFF(pVM), pPage->GCPhys, &HCPhysPT);
     665            AssertRC(rc);
     666
     667            for (unsigned j = 0; j < pPool->cCurPages; j++)
     668            {
     669                PPGMPOOLPAGE pTempPage = &pPool->aPages[j];
     670
     671                if (pTempPage->enmKind == PGMPOOLKIND_PAE_PT_FOR_PAE_PT)
     672                {
     673                    PX86PTPAE pShwPT2 = (PX86PTPAE)PGMPOOL_PAGE_2_PTR(pPool->CTX_SUFF(pVM), pTempPage);
     674
     675                    for (unsigned k = 0; k < RT_ELEMENTS(pShwPT->a); k++)
     676                    {
     677                        if (    pShwPT2->a[k].n.u1Present
     678                            &&  pShwPT2->a[k].n.u1Write
    660679# ifdef PGMPOOL_WITH_OPTIMIZED_DIRTY_PT
    661                         &&  !pPage->fDirty
     680                            &&  !pPage->fDirty
    662681# endif
    663                        )
    664                     {
    665                         pCmdHlp->pfnPrintf(pCmdHlp, NULL, "Pool check r/w: rc=%d idx=%d guest %RX64 shw=%RX64 vs %RHp\n", rc, j, pGstPT->a[j].u, pShwPT->a[j].u, HCPhys);
     682                            &&  ((pShwPT2->a[k].u & X86_PTE_PAE_PG_MASK) == HCPhysPT))
     683                        {
     684                            pCmdHlp->pfnPrintf(pCmdHlp, NULL, "Pool check r/w: GCPhys=%RGp idx=%d shw %RX64 %RX64\n", pTempPage->GCPhys, k, pShwPT->a[k].u, pShwPT2->a[k].u);
     685                        }
    666686                    }
    667687                }
    668688            }
     689
    669690        }
    670691    }
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