VirtualBox

vbox的更動 4561 路徑 trunk/src/VBox/Devices/VMMDev


忽略:
時間撮記:
2007-9-6 上午09:54:06 (17 年 以前)
作者:
vboxsync
訊息:

Try to minimize gc to hc ptr conversion abuse.

檔案:
修改 1 筆資料

圖例:

未更動
新增
刪除
  • 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++)
注意: 瀏覽 TracChangeset 來幫助您使用更動檢視器

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette