VirtualBox

Changeset 52023 in vbox for trunk/src


Ignore:
Timestamp:
Jul 14, 2014 9:00:18 PM (11 years ago)
Author:
vboxsync
Message:

pdmifs.h,DrvBlock,DrvVD: Add methods to allocate and free I/O buffer memory to PDMIBLOCK and PDMIMEDIA. DrvVD decides how to allocate the memory based on the setup

Location:
trunk/src/VBox/Devices/Storage
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Devices/Storage/DrvBlock.cpp

    r47829 r52023  
    310310}
    311311
     312/** @copydoc PDMIBLOCK::pfnIoBufAlloc */
     313static DECLCALLBACK(int) drvblockIoBufAlloc(PPDMIBLOCK pInterface, size_t cb, void **ppvNew)
     314{
     315    PDRVBLOCK pThis = PDMIBLOCK_2_DRVBLOCK(pInterface);
     316
     317    return pThis->pDrvMedia->pfnIoBufAlloc(pThis->pDrvMedia, cb, ppvNew);
     318}
     319
     320/** @copydoc PDMIBLOCK::pfnIoBufFree */
     321static DECLCALLBACK(int) drvblockIoBufFree(PPDMIBLOCK pInterface, void *pv, size_t cb)
     322{
     323    PDRVBLOCK pThis = PDMIBLOCK_2_DRVBLOCK(pInterface);
     324
     325    return pThis->pDrvMedia->pfnIoBufFree(pThis->pDrvMedia, pv, cb);
     326}
     327
    312328/* -=-=-=-=- IBlockAsync -=-=-=-=- */
    313329
     
    873889    pThis->IBlock.pfnGetType                = drvblockGetType;
    874890    pThis->IBlock.pfnGetUuid                = drvblockGetUuid;
     891    pThis->IBlock.pfnIoBufAlloc             = drvblockIoBufAlloc;
     892    pThis->IBlock.pfnIoBufFree              = drvblockIoBufFree;
    875893
    876894    /* IBlockBios. */
  • trunk/src/VBox/Devices/Storage/DrvVD.cpp

    r51923 r52023  
    3737#include <iprt/pipe.h>
    3838#include <iprt/system.h>
     39#include <iprt/memsafer.h>
    3940
    4041#ifdef VBOX_WITH_INIP
     
    18571858}
    18581859
     1860/** @copydoc PDMIMEDIA::pfnIoBufAlloc */
     1861static DECLCALLBACK(int) drvvdIoBufAlloc(PPDMIMEDIA pInterface, size_t cb, void **ppvNew)
     1862{
     1863    LogFlowFunc(("\n"));
     1864    int rc = VINF_SUCCESS;
     1865    void *pvNew = NULL;
     1866    PVBOXDISK pThis = PDMIMEDIA_2_VBOXDISK(pInterface);
     1867
     1868    /* Configured encryption requires locked down memory. */
     1869    if (pThis->pCfgCrypto)
     1870        pvNew = RTMemSaferAllocZ(cb);
     1871    else
     1872    {
     1873        cb = RT_ALIGN_Z(cb, _4K);
     1874        pvNew = RTMemPageAlloc(cb);
     1875    }
     1876
     1877    if (RT_LIKELY(pvNew))
     1878        *ppvNew = pvNew;
     1879    else
     1880        rc = VERR_NO_MEMORY;
     1881
     1882    LogFlowFunc(("returns %Rrc\n", rc));
     1883    return rc;
     1884}
     1885
     1886/** @copydoc PDMIMEDIA::pfnIoBufFree */
     1887static DECLCALLBACK(int) drvvdIoBufFree(PPDMIMEDIA pInterface, void *pv, size_t cb)
     1888{
     1889    LogFlowFunc(("\n"));
     1890    int rc = VINF_SUCCESS;
     1891    PVBOXDISK pThis = PDMIMEDIA_2_VBOXDISK(pInterface);
     1892
     1893    if (pThis->pCfgCrypto)
     1894        RTMemSaferFree(pv, cb);
     1895    else
     1896    {
     1897        cb = RT_ALIGN_Z(cb, _4K);
     1898        RTMemPageFree(pv, cb);
     1899    }
     1900
     1901    LogFlowFunc(("returns %Rrc\n", rc));
     1902    return rc;
     1903}
     1904
     1905
    18591906/*******************************************************************************
    18601907*   Async Media interface methods                                              *
     
    23872434    pThis->IMedia.pfnGetUuid             = drvvdGetUuid;
    23882435    pThis->IMedia.pfnDiscard             = drvvdDiscard;
     2436    pThis->IMedia.pfnIoBufAlloc          = drvvdIoBufAlloc;
     2437    pThis->IMedia.pfnIoBufFree           = drvvdIoBufFree;
    23892438
    23902439    /* IMediaAsync */
Note: See TracChangeset for help on using the changeset viewer.

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