VirtualBox

Changeset 4561

Show
Ignore:
Timestamp:
09/06/07 11:54:06 (1 year ago)
Author:
vboxsync
Message:

Try to minimize gc to hc ptr conversion abuse.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/src/VBox/Devices/VMMDev/VMMDevHGCM.cpp

    r4200 r4561  
    5353    uint32_t cPages; 
    5454     
    55     /* Pointer to array of the HC addresses for these pages.  
    56      * It is assumed that the HC address of the locked resident 
    57      * guest physical page does not change. 
     55    /* Pointer to array of the GC physical addresses for these pages.  
     56     * It is assumed that the physical address of the locked resident 
     57     * guest page does not change. 
    5858     */ 
    59     RTHCPTR *paPages; 
     59    RTGCPHYS *paPages; 
    6060     
    6161} VBOXHGCMLINPTR; 
     
    181181                                 uint32_t iLinPtr, 
    182182                                 VBOXHGCMLINPTR *paLinPtrs, 
    183                                  RTHCPTR **ppPages) 
     183                                 RTGCPHYS **ppPages) 
    184184{ 
    185185    int rc = VINF_SUCCESS; 
     
    211211    { 
    212212        /* convert */ 
    213         RTHCPTR HCPtr
    214          
    215         rc = PDMDevHlpPhysGCPtr2HCPtr(pDevIns, GCPtr, &HCPtr); 
    216          
    217         Log(("vmmdevHGCMSaveLinPtr: Page %d: %VGv -> %p. %Vrc\n", iPage, GCPtr, HCPtr, rc)); 
     213        RTGCPHYS GCPhys
     214         
     215        rc = PDMDevHlpPhysGCPtr2GCPhys(pDevIns, GCPtr, &GCPhys); 
     216         
     217        Log(("vmmdevHGCMSaveLinPtr: Page %d: %VGv -> %VGp. %Vrc\n", iPage, GCPtr, GCPhys, rc)); 
    218218     
    219219        if (VBOX_FAILURE (rc)) 
     
    223223 
    224224        /* store */ 
    225         pLinPtr->paPages[iPage++] = HCPtr
     225        pLinPtr->paPages[iPage++] = GCPhys
    226226 
    227227        /* next */ 
     
    247247    AssertRelease (u32Size > 0 && iParm == (uint32_t)pLinPtr->iParm); 
    248248     
    249     uint8_t *pu8Dst = (uint8_t *)pLinPtr->paPages[0] + pLinPtr->cbOffsetFirstPage; 
    250     uint8_t *pu8Src = (uint8_t *)pvHost; 
     249    RTGCPHYS GCPhysDst = pLinPtr->paPages[0] + pLinPtr->cbOffsetFirstPage; 
     250    uint8_t *pu8Src    = (uint8_t *)pvHost; 
    251251     
    252252    Log(("vmmdevHGCMWriteLinPtr: parm %d: size %d, cPages = %d\n", iParm, u32Size, pLinPtr->cPages)); 
     
    261261                             PAGE_SIZE; 
    262262                              
    263         Log(("vmmdevHGCMWriteLinPtr: page %d: dst %p, src %p, cbWrite %d\n", iPage, pu8Dst, pu8Src, cbWrite)); 
     263        Log(("vmmdevHGCMWriteLinPtr: page %d: dst %VGp, src %p, cbWrite %d\n", iPage, GCPhysDst, pu8Src, cbWrite)); 
    264264         
    265265        iPage++; 
     
    267267        if (cbWrite >= u32Size) 
    268268        { 
    269             memcpy (pu8Dst, pu8Src, u32Size); 
     269            PDMDevHlpPhysWrite(pDevIns, GCPhysDst, pu8Src, u32Size); 
    270270            u32Size = 0; 
    271271            break; 
    272272        } 
    273273         
    274         memcpy (pu8Dst, pu8Src, cbWrite); 
     274        PDMDevHlpPhysWrite(pDevIns, GCPhysDst, pu8Src, cbWrite); 
    275275 
    276276        /* next */ 
     
    278278        pu8Src     += cbWrite; 
    279279         
    280         pu8Dst = (uint8_t *)pLinPtr->paPages[iPage]; 
     280        GCPhysDst   = pLinPtr->paPages[iPage]; 
    281281    } 
    282282     
     
    427427    { 
    428428        pCmd->paLinPtrs = (VBOXHGCMLINPTR *)RTMemAlloc (  sizeof (VBOXHGCMLINPTR) * cLinPtrs 
    429                                                           + sizeof (RTHCPTR) * cLinPtrPages); 
     429                                                          + sizeof (RTGCPHYS) * cLinPtrPages); 
    430430     
    431431        if (pCmd->paLinPtrs == NULL) 
     
    457457 
    458458        uint32_t iLinPtr = 0; 
    459         RTHCPTR *pPages  = (RTHCPTR *)((uint8_t *)pCmd->paLinPtrs + sizeof (VBOXHGCMLINPTR) *cLinPtrs); 
     459        RTGCPHYS *pPages  = (RTGCPHYS *)((uint8_t *)pCmd->paLinPtrs + sizeof (VBOXHGCMLINPTR) *cLinPtrs); 
    460460 
    461461        for (i = 0; i < cParms && VBOX_SUCCESS(rc); i++, pGuestParm++, pHostParm++) 

© 2008 Sun Microsystems, Inc.
ContactPrivacy policy