VirtualBox

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


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

pgmpoolcheck update

File:
1 edited

Legend:

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

    r22717 r22718  
    637637    {
    638638        PPGMPOOLPAGE pPage = &pPool->aPages[i];
     639        bool fFirstMsg = true;
    639640
    640641        /* Todo: cover other paging modes too. */
     
    655656                        ||  (pShwPT->a[j].u & X86_PTE_PAE_PG_MASK) != HCPhys)
    656657                    {
    657                         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);
     658                        if (fFirstMsg)
     659                        {
     660                            pCmdHlp->pfnPrintf(pCmdHlp, NULL, "Check pool page %RGp\n", pPage->GCPhys);
     661                            fFirstMsg = false;
     662                        }
     663                        pCmdHlp->pfnPrintf(pCmdHlp, NULL, "Mismatch HCPhys: rc=%d idx=%d guest %RX64 shw=%RX64 vs %RHp\n", rc, j, pGstPT->a[j].u, pShwPT->a[j].u, HCPhys);
    658664                    }
    659665                }
     
    664670            rc = PGMPhysGCPhys2HCPhys(pPool->CTX_SUFF(pVM), pPage->GCPhys, &HCPhysPT);
    665671            AssertRC(rc);
    666 
    667             for (unsigned j = 0; j < pPool->cCurPages; j++)
     672            if (rc == VINF_SUCCESS)
    668673            {
    669                 PPGMPOOLPAGE pTempPage = &pPool->aPages[j];
    670 
    671                 if (pTempPage->enmKind == PGMPOOLKIND_PAE_PT_FOR_PAE_PT)
     674                for (unsigned j = 0; j < pPool->cCurPages; j++)
    672675                {
    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                    PPGMPOOLPAGE pTempPage = &pPool->aPages[j];
     677
     678                    if (pTempPage->enmKind == PGMPOOLKIND_PAE_PT_FOR_PAE_PT)
    676679                    {
    677                         if (    pShwPT2->a[k].n.u1Present
    678                             &&  pShwPT2->a[k].n.u1Write
     680                        PX86PTPAE pShwPT2 = (PX86PTPAE)PGMPOOL_PAGE_2_PTR(pPool->CTX_SUFF(pVM), pTempPage);
     681
     682                        for (unsigned k = 0; k < RT_ELEMENTS(pShwPT->a); k++)
     683                        {
     684                            if (    pShwPT2->a[k].n.u1Present
     685                                &&  pShwPT2->a[k].n.u1Write
    679686# ifdef PGMPOOL_WITH_OPTIMIZED_DIRTY_PT
    680                             &&  !pPage->fDirty
     687                                &&  !pPage->fDirty
    681688# endif
    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);
     689                                &&  ((pShwPT2->a[k].u & X86_PTE_PAE_PG_MASK) == HCPhysPT))
     690                            {
     691                                if (fFirstMsg)
     692                                {
     693                                    pCmdHlp->pfnPrintf(pCmdHlp, NULL, "Check pool page %RGp\n", pPage->GCPhys);
     694                                    fFirstMsg = false;
     695                                }
     696                                pCmdHlp->pfnPrintf(pCmdHlp, NULL, "Mismatch: r/w: GCPhys=%RGp idx=%d shw %RX64 %RX64\n", pTempPage->GCPhys, k, pShwPT->a[k].u, pShwPT2->a[k].u);
     697                            }
    685698                        }
    686699                    }
    687700                }
    688701            }
    689 
    690702        }
    691703    }
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