VirtualBox

Changeset 30500 in vbox


Ignore:
Timestamp:
Jun 29, 2010 1:20:37 PM (15 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
63192
Message:

More fixes

Location:
trunk/src/VBox/VMM/PATM
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/PATM/CSAM.cpp

    r30499 r30500  
    673673 * @param   pCacheRec   Address conversion cache record
    674674 * @param   pGCPtr      Guest context pointer
    675  * @param   pLock       Where to store the lock information that PGMPhysReleasePageMappingLock needs.
    676675 * @returns             Host context pointer or NULL in case of an error
    677676 *
    678677 */
    679 static R3PTRTYPE(void *) CSAMGCVirtToHCVirt(PVM pVM, PCSAMP2GLOOKUPREC pCacheRec, RCPTRTYPE(uint8_t *) pGCPtr, PPGMPAGEMAPLOCK pLock)
     678static R3PTRTYPE(void *) CSAMGCVirtToHCVirt(PVM pVM, PCSAMP2GLOOKUPREC pCacheRec, RCPTRTYPE(uint8_t *) pGCPtr)
    680679{
    681680    int rc;
     
    684683    PVMCPU pVCpu = VMMGetCpu0(pVM);
    685684
    686     pLock->pvMap = NULL;    /* invalidate it in case we don't call PGMPhysGCPtr2CCPtrReadOnly */
    687685    STAM_PROFILE_START(&pVM->csam.s.StatTimeAddrConv, a);
    688686
    689687    pHCPtr = PATMR3GCPtrToHCPtr(pVM, pGCPtr);
    690     if (pHCPtr) return pHCPtr;
     688    if (pHCPtr)
     689        return pHCPtr;
    691690
    692691    if (pCacheRec->pPageLocStartHC)
     
    700699    }
    701700
    702     rc = PGMPhysGCPtr2CCPtrReadOnly(pVCpu, pGCPtr, (const void **)&pHCPtr, pLock);
     701    /* Release previous lock if any. */
     702    if (pCacheRec->Lock.pvMap)
     703    {
     704        PGMPhysReleasePageMappingLock(pVM, &pCacheRec->Lock);
     705        pCacheRec->Lock.pvMap = NULL;
     706    }
     707
     708    rc = PGMPhysGCPtr2CCPtrReadOnly(pVCpu, pGCPtr, (const void **)&pHCPtr, &pCacheRec->Lock);
    703709    if (rc != VINF_SUCCESS)
    704710    {
     
    863869            cbInstr     += opsize;
    864870
    865             {
    866                 PGMPAGEMAPLOCK PageLock;
     871            {   /* Force pCurInstrHC out of scope after we stop using it (page lock!) */
    867872                uint8_t       *pCurInstrHC = 0;
    868                 pCurInstrHC = (uint8_t *)CSAMGCVirtToHCVirt(pVM, pCacheRec, pCurInstrGC, &PageLock);
     873                pCurInstrHC = (uint8_t *)CSAMGCVirtToHCVirt(pVM, pCacheRec, pCurInstrGC);
    869874                if (pCurInstrHC == NULL)
    870875                {
     
    876881                cpu.mode = (fCode32) ? CPUMODE_32BIT : CPUMODE_16BIT;
    877882                rc = CSAMR3DISInstr(pVM, &cpu, pCurInstrGC, pCurInstrHC, &opsize, NULL);
    878                 if (PageLock.pvMap)
    879                     PGMPhysReleasePageMappingLock(pVM, &PageLock);
    880883            }
    881884            AssertRC(rc);
     
    12591262        }
    12601263
    1261         {
    1262             PGMPAGEMAPLOCK PageLock;
    1263             uint8_t *pCurInstrHC = (uint8_t *)CSAMGCVirtToHCVirt(pVM, pCacheRec, pCurInstrGC, &PageLock);
     1264        {   /* Force pCurInstrHC out of scope after we stop using it (page lock!) */
     1265            uint8_t *pCurInstrHC = (uint8_t *)CSAMGCVirtToHCVirt(pVM, pCacheRec, pCurInstrGC);
    12641266            if (pCurInstrHC == NULL)
    12651267            {
     
    12791281#endif
    12801282            STAM_PROFILE_STOP(&pVM->csam.s.StatTimeDisasm, a);
    1281             if (PageLock.pvMap)
    1282                 PGMPhysReleasePageMappingLock(pVM, &PageLock);
    12831283        }
    12841284        if (RT_FAILURE(rc2))
     
    22972297    if (CSAMIsEnabled(pVM))
    22982298    {
    2299         // Cache record for PATMGCVirtToHCVirt
     2299        /* Cache record for CSAMGCVirtToHCVirt */
    23002300        CSAMP2GLOOKUPREC cacheRec;
    23012301        RT_ZERO(cacheRec);
     
    23042304        rc = csamAnalyseCallCodeStream(pVM, pInstrGC, pInstrGC, true /* 32 bits code */, CSAMR3AnalyseCallback, pPage, &cacheRec);
    23052305        STAM_PROFILE_STOP(&pVM->csam.s.StatTime, a);
     2306        if (cacheRec.Lock.pvMap)
     2307            PGMPhysReleasePageMappingLock(pVM, &cacheRec.Lock);
     2308
    23062309        if (rc != VINF_SUCCESS)
    23072310        {
     
    24572460            {
    24582461                PCSAMPAGE pPage = NULL;
    2459                 CSAMP2GLOOKUPREC cacheRec;                  /* Cache record for PATMGCVirtToHCVirt. */
     2462                CSAMP2GLOOKUPREC cacheRec;                  /* Cache record for CSAMGCVirtToHCVirt. */
    24602463                RT_ZERO(cacheRec);
    24612464
     
    24642467                rc = csamAnalyseCodeStream(pVM, pHandler, pHandler, true, CSAMR3AnalyseCallback, pPage, &cacheRec);
    24652468                STAM_PROFILE_STOP(&pVM->csam.s.StatTime, a);
     2469                if (cacheRec.Lock.pvMap)
     2470                    PGMPhysReleasePageMappingLock(pVM, &cacheRec.Lock);
     2471
    24662472                if (rc != VINF_SUCCESS)
    24672473                {
     
    25112517            PCSAMPAGE pPage = NULL;
    25122518            DBGFSELINFO selInfo;
    2513             CSAMP2GLOOKUPREC cacheRec;                  /* Cache record for PATMGCVirtToHCVirt. */
     2519            CSAMP2GLOOKUPREC cacheRec;                  /* Cache record for CSAMGCVirtToHCVirt. */
    25142520            RT_ZERO(cacheRec);
    25152521
     
    25422548            rc = csamAnalyseCodeStream(pVM, pHandler, pHandler, true, CSAMR3AnalyseCallback, pPage, &cacheRec);
    25432549            STAM_PROFILE_STOP(&pVM->csam.s.StatTime, b);
     2550            if (cacheRec.Lock.pvMap)
     2551                PGMPhysReleasePageMappingLock(pVM, &cacheRec.Lock);
     2552
    25442553            if (rc != VINF_SUCCESS)
    25452554            {
  • trunk/src/VBox/VMM/PATM/CSAMInternal.h

    r28800 r30500  
    7474
    7575    PCSAMCALLEXITREC     pCallExitRec;
     76
     77    PGMPAGEMAPLOCK       Lock;
    7678} CSAMP2GLOOKUPREC, *PCSAMP2GLOOKUPREC;
    7779
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