VirtualBox

Changeset 91937 in vbox for trunk/src/VBox/Devices


Ignore:
Timestamp:
Oct 21, 2021 11:38:29 AM (3 years ago)
Author:
vboxsync
Message:

Devices/Storage/DrvVD: Eliminate the last direct calls to CFGMR3* and use the driver helper callbacks, bguref:10074

File:
1 edited

Legend:

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

    r91898 r91937  
    252252/** Number of bins for allocated requests. */
    253253#define DRVVD_VDIOREQ_ALLOC_BINS    8
     254
     255/**
     256 * VD config node.
     257 */
     258typedef struct VDCFGNODE
     259{
     260    /** List node for the list of config nodes. */
     261    RTLISTNODE              NdLst;
     262    /** Pointer to the driver helper callbacks. */
     263    PCPDMDRVHLPR3           pHlp;
     264    /** The config node. */
     265    PCFGMNODE               pCfgNode;
     266} VDCFGNODE;
     267/** Pointer to a VD config node. */
     268typedef VDCFGNODE *PVDCFGNODE;
    254269
    255270/**
     
    368383    PVDREGIONLIST           pRegionList;
    369384
     385    /** VD config support.
     386     * @{ */
     387    /** List head of config nodes. */
     388    RTLISTANCHOR            LstCfgNodes;
     389    /** @} */
     390
    370391    /** Cryptographic support
    371392     * @{ */
    372393    /** Pointer to the CFGM node containing the config of the crypto filter
    373394     * if enable. */
    374     PCFGMNODE                pCfgCrypto;
     395    VDCFGNODE                CfgCrypto;
    375396    /** Config interface for the encryption filter. */
    376397    VDINTERFACECONFIG        VDIfCfg;
     
    902923static DECLCALLBACK(bool) drvvdCfgAreKeysValid(void *pvUser, const char *pszzValid)
    903924{
    904     return CFGMR3AreValuesValid((PCFGMNODE)pvUser, pszzValid);
     925    PVDCFGNODE      pVdCfgNode = (PVDCFGNODE)pvUser;
     926    PCPDMDRVHLPR3   pHlp       = pVdCfgNode->pHlp;
     927    return pHlp->pfnCFGMAreValuesValid(pVdCfgNode->pCfgNode, pszzValid);
    905928}
    906929
    907930static DECLCALLBACK(int) drvvdCfgQuerySize(void *pvUser, const char *pszName, size_t *pcb)
    908931{
    909     return CFGMR3QuerySize((PCFGMNODE)pvUser, pszName, pcb);
     932    PVDCFGNODE      pVdCfgNode = (PVDCFGNODE)pvUser;
     933    PCPDMDRVHLPR3   pHlp       = pVdCfgNode->pHlp;
     934    return pHlp->pfnCFGMQuerySize(pVdCfgNode->pCfgNode, pszName, pcb);
    910935}
    911936
    912937static DECLCALLBACK(int) drvvdCfgQuery(void *pvUser, const char *pszName, char *pszString, size_t cchString)
    913938{
    914     return CFGMR3QueryString((PCFGMNODE)pvUser, pszName, pszString, cchString);
     939    PVDCFGNODE      pVdCfgNode = (PVDCFGNODE)pvUser;
     940    PCPDMDRVHLPR3   pHlp       = pVdCfgNode->pHlp;
     941    return pHlp->pfnCFGMQueryString(pVdCfgNode->pCfgNode, pszName, pszString, cchString);
    915942}
    916943
    917944static DECLCALLBACK(int) drvvdCfgQueryBytes(void *pvUser, const char *pszName, void *ppvData, size_t cbData)
    918945{
    919     return CFGMR3QueryBytes((PCFGMNODE)pvUser, pszName, ppvData, cbData);
     946    PVDCFGNODE      pVdCfgNode = (PVDCFGNODE)pvUser;
     947    PCPDMDRVHLPR3   pHlp       = pVdCfgNode->pHlp;
     948    return pHlp->pfnCFGMQueryBytes(pVdCfgNode->pCfgNode, pszName, ppvData, cbData);
    920949}
    921950
     
    13781407static int drvvdKeyCheckPrereqs(PVBOXDISK pThis, bool fSetError)
    13791408{
    1380     if (   pThis->pCfgCrypto
     1409    if (   pThis->CfgCrypto.pCfgNode
    13811410        && !pThis->pIfSecKey)
    13821411    {
     
    14921521    }
    14931522
    1494     if (   pThis->pCfgCrypto
     1523    if (   pThis->CfgCrypto.pCfgNode
    14951524        && !pThis->pIfSecKey)
    14961525        return VERR_VD_DEK_MISSING;
     
    16801709    int rc = VINF_SUCCESS;
    16811710
    1682     if (pThis->pCfgCrypto)
     1711    if (pThis->CfgCrypto.pCfgNode)
    16831712    {
    16841713        PVDINTERFACE pVDIfFilter = NULL;
     
    17021731
    17031732            rc = VDInterfaceAdd(&pThis->VDIfCfg.Core, "DrvVD_Config", VDINTERFACETYPE_CONFIG,
    1704                                 pThis->pCfgCrypto, sizeof(VDINTERFACECONFIG), &pVDIfFilter);
     1733                                &pThis->CfgCrypto, sizeof(VDINTERFACECONFIG), &pVDIfFilter);
    17051734            AssertRC(rc);
    17061735
     
    21732202    PVBOXDISK pThis = PDMINS_2_DATA(pDrvIns, PVBOXDISK);
    21742203
    2175     Assert (!pThis->pCfgCrypto);
     2204    Assert (!pThis->CfgCrypto.pCfgNode);
    21762205
    21772206    switch (enmXferDir)
     
    39613990        if (RT_SUCCESS(rc))
    39623991        {
     3992            VDCFGNODE CfgNode;
     3993
    39633994            VDIfConfig.pfnAreKeysValid = drvvdCfgAreKeysValid;
    39643995            VDIfConfig.pfnQuerySize    = drvvdCfgQuerySize;
    39653996            VDIfConfig.pfnQuery        = drvvdCfgQuery;
    39663997            VDIfConfig.pfnQueryBytes   = drvvdCfgQueryBytes;
     3998
     3999            CfgNode.pHlp     = pThis->pDrvIns->pHlpR3;
     4000            CfgNode.pCfgNode = pCfgFilterConfig;
    39674001            rc = VDInterfaceAdd(&VDIfConfig.Core, "DrvVD_Config", VDINTERFACETYPE_CONFIG,
    3968                                 pCfgFilterConfig, sizeof(VDINTERFACECONFIG), &pVDIfsFilter);
     4002                                &CfgNode, sizeof(VDINTERFACECONFIG), &pVDIfsFilter);
    39694003            AssertRC(rc);
    39704004
     
    44764510
    44774511    drvvdStatsDeregister(pThis);
     4512
     4513    PVDCFGNODE pIt;
     4514    PVDCFGNODE pItNext;
     4515    RTListForEachSafe(&pThis->LstCfgNodes, pIt, pItNext, VDCFGNODE, NdLst)
     4516    {
     4517        RTListNodeRemove(&pIt->NdLst);
     4518        RTMemFreeZ(pIt, sizeof(*pIt));
     4519    }
    44784520}
    44794521
     
    45134555    pThis->uMergeSource                 = VD_LAST_IMAGE;
    45144556    pThis->uMergeTarget                 = VD_LAST_IMAGE;
    4515     pThis->pCfgCrypto                   = NULL;
     4557    pThis->CfgCrypto.pCfgNode           = NULL;
     4558    pThis->CfgCrypto.pHlp               = pDrvIns->pHlpR3;
    45164559    pThis->pIfSecKey                    = NULL;
    45174560    pThis->hIoReqCache                  = NIL_RTMEMCACHE;
     
    45774620    pThis->IMediaEx.pfnIoReqSuspendedLoad       = drvvdIoReqSuspendedLoad;
    45784621
     4622    RTListInit(&pThis->LstCfgNodes);
     4623
    45794624    /* Initialize supported VD interfaces. */
    45804625    pThis->pVDIfsDisk = NULL;
     
    49494994
    49504995    if (pThis->pDrvMediaExPort)
    4951         rc = IOBUFMgrCreate(&pThis->hIoBufMgr, cbIoBufMax, pThis->pCfgCrypto ? IOBUFMGR_F_REQUIRE_NOT_PAGABLE : IOBUFMGR_F_DEFAULT);
     4996        rc = IOBUFMgrCreate(&pThis->hIoBufMgr, cbIoBufMax, pThis->CfgCrypto.pCfgNode ? IOBUFMGR_F_REQUIRE_NOT_PAGABLE : IOBUFMGR_F_DEFAULT);
    49524997
    49534998    if (   !fEmptyDrive
     
    50845129            pImage->VDIfConfig.pfnQuery        = drvvdCfgQuery;
    50855130            pImage->VDIfConfig.pfnQueryBytes   = NULL;
     5131
     5132            PVDCFGNODE pCfgNode = (PVDCFGNODE)RTMemAllocZ(sizeof(*pCfgNode));
     5133            if (RT_UNLIKELY(!pCfgNode))
     5134            {
     5135                rc = PDMDRV_SET_ERROR(pDrvIns, VERR_NO_MEMORY,
     5136                                      N_("DrvVD: Failed to allocate memory for config node"));
     5137                break;
     5138            }
     5139
     5140            pCfgNode->pHlp     = pDrvIns->pHlpR3;
     5141            pCfgNode->pCfgNode = pCfgVDConfig;
     5142            RTListAppend(&pThis->LstCfgNodes, &pCfgNode->NdLst);
     5143
    50865144            rc = VDInterfaceAdd(&pImage->VDIfConfig.Core, "DrvVD_Config", VDINTERFACETYPE_CONFIG,
    5087                                 pCfgVDConfig, sizeof(VDINTERFACECONFIG), &pImage->pVDIfsImage);
     5145                                pCfgNode, sizeof(VDINTERFACECONFIG), &pImage->pVDIfsImage);
    50885146            AssertRC(rc);
    50895147
     
    50965154             * crypto stuff.
    50975155             */
    5098             if (!pThis->pCfgCrypto)
     5156            if (!pThis->CfgCrypto.pCfgNode)
    50995157            {
    51005158                if (pCfgVDConfig)
    5101                     pThis->pCfgCrypto = pHlp->pfnCFGMGetChild(pCfgVDConfig, "CRYPT");
    5102 
    5103                 if (pThis->pCfgCrypto)
     5159                    pThis->CfgCrypto.pCfgNode = pHlp->pfnCFGMGetChild(pCfgVDConfig, "CRYPT");
     5160
     5161                if (pThis->CfgCrypto.pCfgNode)
    51045162                {
    51055163                    /* Setup VDConfig interface for disk encryption support. */
     
    53155373            && !pThis->fShareable
    53165374            && !fDiscard
    5317             && !pThis->pCfgCrypto /* Disk encryption disables the block cache for security reasons */
     5375            && !pThis->CfgCrypto.pCfgNode /* Disk encryption disables the block cache for security reasons */
    53185376            && RT_SUCCESS(rc))
    53195377        {
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