VirtualBox

忽略:
時間撮記:
2008-10-9 下午11:04:30 (16 年 以前)
作者:
vboxsync
訊息:

#1865: Enabled the new PGMPhysSimpleReadGCPtr code.

檔案:
修改 1 筆資料

圖例:

未更動
新增
刪除
  • trunk/src/VBox/VMM/VMMAll/PGMAllPhys.cpp

    r13147 r13148  
    20222022VMMDECL(int) PGMPhysSimpleReadGCPtr(PVM pVM, void *pvDst, RTGCPTR GCPtrSrc, size_t cb)
    20232023{
    2024 # if defined(VBOX_WITH_2X_4GB_ADDR_SPACE_IN_R0) || defined(VBOX_WITH_NEW_PHYS_CODE)
    20252024    /*
    20262025     * Treat the first page as a special case.
     
    20782077    }
    20792078    /* won't ever get here. */
    2080 
    2081 # else  /* !VBOX_WITH_2X_4GB_ADDR_SPACE_IN_R0 && !VBOX_WITH_NEW_PHYS_CODE */
    2082 
    2083     /*
    2084      * Anything to do?
    2085      */
    2086     if (!cb)
    2087         return VINF_SUCCESS;
    2088 
    2089     /*
    2090      * Optimize reads within a single page.
    2091      */
    2092     if (((RTGCUINTPTR)GCPtrSrc & PAGE_OFFSET_MASK) + cb <= PAGE_SIZE)
    2093     {
    2094         void *pvSrc;
    2095         int rc = PGMPhysGCPtr2HCPtr(pVM, GCPtrSrc, &pvSrc);
    2096         if (VBOX_FAILURE(rc))
    2097             return rc;
    2098         memcpy(pvDst, pvSrc, cb);
    2099         return VINF_SUCCESS;
    2100     }
    2101 
    2102     /*
    2103      * Page by page.
    2104      */
    2105     for (;;)
    2106     {
    2107         /* convert */
    2108         void *pvSrc;
    2109         int rc = PGMPhysGCPtr2HCPtr(pVM, GCPtrSrc, &pvSrc);
    2110         if (VBOX_FAILURE(rc))
    2111             return rc;
    2112 
    2113         /* copy */
    2114         size_t cbRead = PAGE_SIZE - ((RTGCUINTPTR)GCPtrSrc & PAGE_OFFSET_MASK);
    2115         if (cbRead >= cb)
    2116         {
    2117             memcpy(pvDst, pvSrc, cb);
    2118             return VINF_SUCCESS;
    2119         }
    2120         memcpy(pvDst, pvSrc, cbRead);
    2121 
    2122         /* next */
    2123         cb         -= cbRead;
    2124         pvDst       = (uint8_t *)pvDst + cbRead;
    2125         GCPtrSrc   += cbRead;
    2126     }
    2127 # endif /* !VBOX_WITH_2X_4GB_ADDR_SPACE_IN_R0 && !VBOX_WITH_NEW_PHYS_CODE */
    21282079}
    21292080
注意: 瀏覽 TracChangeset 來幫助您使用更動檢視器

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