VirtualBox

Changeset 27271 in vbox


Ignore:
Timestamp:
Mar 11, 2010 11:08:29 AM (15 years ago)
Author:
vboxsync
Message:

Reference count debugging code added

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

Legend:

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

    r27184 r27271  
    33903390bool            pgmPoolIsDirtyPage(PVM pVM, RTGCPHYS GCPhys);
    33913391int             pgmPoolTrackUpdateGCPhys(PVM pVM, RTGCPHYS GCPhysPage, PPGMPAGE pPhysPage, bool fFlushPTEs, bool *pfFlushTLBs);
     3392void            pgmPoolTracDerefGCPhysHint(PPGMPOOL pPool, PPGMPOOLPAGE pPage, RTHCPHYS HCPhys, RTGCPHYS GCPhysHint);
    33923393void            pgmPoolInvalidateDirtyPage(PVM pVM, RTGCPHYS GCPhysPT);
    33933394DECLINLINE(int) pgmPoolTrackFlushGCPhys(PVM pVM, RTGCPHYS GCPhysPage, PPGMPAGE pPhysPage, bool *pfFlushTLBs)
  • trunk/src/VBox/VMM/PGMPool.cpp

    r26364 r27271  
    641641                        void *pvShw = PGMPOOL_PAGE_2_PTR(pPool->CTX_SUFF(pVM), pPage);
    642642                        STAM_PROFILE_START(&pPool->StatZeroPage, z);
     643#ifdef DEBUG_sandervl
     644                        switch (pPage->enmKind)
     645                        {
     646                            case PGMPOOLKIND_PAE_PT_FOR_32BIT_PT:
     647                            case PGMPOOLKIND_PAE_PT_FOR_32BIT_4MB:
     648                            case PGMPOOLKIND_PAE_PT_FOR_PAE_PT:
     649                            case PGMPOOLKIND_PAE_PT_FOR_PAE_2MB:
     650                            case PGMPOOLKIND_PAE_PT_FOR_PHYS:
     651                            {
     652                                bool fFoundFirst = false;
     653                                PX86PT pPT = (PX86PT)pvShw;
     654                                for (unsigned ptIndex = 0; ptIndex < RT_ELEMENTS(pPT->a); ptIndex++)
     655                                {
     656                                    if (pPT->a[ptIndex].u)
     657                                    {
     658                                        if (!fFoundFirst)
     659                                        {
     660                                            AssertFatalMsg(pPage->iFirstPresent <= ptIndex, ("ptIndex = %d first present = %d\n", ptIndex, pPage->iFirstPresent));
     661                                            if (pPage->iFirstPresent != ptIndex)
     662                                                Log(("ptIndex = %d first present = %d\n", ptIndex, pPage->iFirstPresent));
     663                                            fFoundFirst = true;
     664                                        }
     665                                        if (pPT->a[ptIndex].n.u1Present)
     666                                        {
     667                                            pgmPoolTracDerefGCPhysHint(pPool, pPage, pPT->a[ptIndex].u & X86_PTE_PAE_PG_MASK, NIL_RTGCPHYS);
     668                                            if (pPage->iFirstPresent == ptIndex)
     669                                                pPage->iFirstPresent = NIL_PGMPOOL_PRESENT_INDEX;
     670                                        }
     671                                    }
     672                                }
     673                                AssertFatalMsg(pPage->cPresent == 0, ("cPresent = %d pPage = 0x%x\n", pPage->cPresent, (uint32_t) pPage));
     674                                break;
     675                            }
     676                            default:
     677                                break;
     678                        }
     679#endif
    643680                        ASMMemZeroPage(pvShw);
    644681                        STAM_PROFILE_STOP(&pPool->StatZeroPage, z);
  • trunk/src/VBox/VMM/VMMAll/PGMAllPool.cpp

    r27204 r27271  
    6868void            pgmPoolTrackPhysExtFree(PVM pVM, uint16_t iPhysExt);
    6969void            pgmPoolTrackPhysExtFreeList(PVM pVM, uint16_t iPhysExt);
    70 static void     pgmPoolTracDerefGCPhysHint(PPGMPOOL pPool, PPGMPOOLPAGE pPage, RTHCPHYS HCPhys, RTGCPHYS GCPhysHint);
    7170
    7271RT_C_DECLS_END
     
    32323231    PPGMPOOL pPool = pVM->pgm.s.CTX_SUFF(pPool); NOREF(pPool);
    32333232
    3234     /* We should only come here with when there's only one reference in this physical page. */
     3233    /* We should only come here with when there's only one reference to this physical page. */
    32353234    Assert(PGMPOOL_TD_GET_CREFS(PGM_PAGE_GET_TRACKING(pPhysPage)) == 1);
    32363235    Assert(cRefs == 1);
     
    40254024 * @param   GCPhysHint  The guest physical address which may corresponding to HCPhys.
    40264025 */
    4027 static void pgmPoolTracDerefGCPhysHint(PPGMPOOL pPool, PPGMPOOLPAGE pPage, RTHCPHYS HCPhys, RTGCPHYS GCPhysHint)
     4026void pgmPoolTracDerefGCPhysHint(PPGMPOOL pPool, PPGMPOOLPAGE pPage, RTHCPHYS HCPhys, RTGCPHYS GCPhysHint)
    40284027{
    40294028    Log4(("pgmPoolTracDerefGCPhysHint %RHp %RGp\n", HCPhys, GCPhysHint));
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