VirtualBox

忽略:
時間撮記:
2014-8-8 上午09:44:09 (10 年 以前)
作者:
vboxsync
訊息:

VMM/PGM: Fix.

檔案:
修改 1 筆資料

圖例:

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

    r51643 r52318  
    33153315        /* copy */
    33163316        size_t cbRead = PAGE_SIZE - ((RTGCUINTPTR)GCPtrSrc & PAGE_OFFSET_MASK);
    3317         rc = PGMPhysRead(pVM, GCPhys, pvDst, cbRead);
    3318         if (cbRead >= cb || RT_FAILURE(rc))
    3319             return rc;
     3317        if (cbRead < cb)
     3318        {
     3319            rc = PGMPhysRead(pVM, GCPhys, pvDst, cbRead);
     3320            if (RT_FAILURE(rc))
     3321                return rc;
     3322        }
     3323        else    /* Last page (cbRead is PAGE_SIZE, we only need cb!) */
     3324            return PGMPhysRead(pVM, GCPhys, pvDst, cb);
    33203325
    33213326        /* next */
     3327        Assert(cb > cbRead);
    33223328        cb         -= cbRead;
    33233329        pvDst       = (uint8_t *)pvDst + cbRead;
     
    34053411        /* copy */
    34063412        size_t cbWrite = PAGE_SIZE - ((RTGCUINTPTR)GCPtrDst & PAGE_OFFSET_MASK);
    3407         rc = PGMPhysWrite(pVM, GCPhys, pvSrc, cbWrite);
    3408         if (cbWrite >= cb || RT_FAILURE(rc))
    3409             return rc;
     3413        if (cbWrite < cb)
     3414        {
     3415            rc = PGMPhysWrite(pVM, GCPhys, pvSrc, cbWrite);
     3416            if (RT_FAILURE(rc))
     3417                return rc;
     3418        }
     3419        else    /* Last page (cbWrite is PAGE_SIZE, we only need cb!) */
     3420            rc = PGMPhysWrite(pVM, GCPhys, pvSrc, cb);
    34103421
    34113422        /* next */
     3423        Assert(cb > cbWrite);
    34123424        cb         -= cbWrite;
    34133425        pvSrc       = (uint8_t *)pvSrc + cbWrite;
注意: 瀏覽 TracChangeset 來幫助您使用更動檢視器

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