VirtualBox

Changeset 91920 in vbox for trunk/src/VBox/VMM/VMMR3


Ignore:
Timestamp:
Oct 21, 2021 6:45:26 AM (3 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
147725
Message:

VMM,Devices: Eliminate direct calls to VMMR3 and VMR3 APIs and introduce callbacks in the device helper callback table, bugref:10074

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/VMMR3/PDMDevHlp.cpp

    r91909 r91920  
    963963
    964964
     965/** @interface_method_impl{PDMDEVHLPR3,pfnPhysIsGCPhysNormal} */
     966static DECLCALLBACK(bool) pdmR3DevHlp_PhysIsGCPhysNormal(PPDMDEVINS pDevIns, RTGCPHYS GCPhys)
     967{
     968    PDMDEV_ASSERT_DEVINS(pDevIns);
     969    LogFlow(("pdmR3DevHlp_PhysIsGCPhysNormal: caller='%s'/%d: GCPhys=%RGp\n",
     970             pDevIns->pReg->szName, pDevIns->iInstance, GCPhys));
     971
     972    bool fNormal = PGMPhysIsGCPhysNormal(pDevIns->Internal.s.pVMR3, GCPhys);
     973
     974    Log(("pdmR3DevHlp_PhysIsGCPhysNormal: caller='%s'/%d: returns %RTbool\n", pDevIns->pReg->szName, pDevIns->iInstance, fNormal));
     975    return fNormal;
     976}
     977
     978
    965979/** @interface_method_impl{PDMDEVHLPR3,pfnCpuGetGuestMicroarch} */
    966980static DECLCALLBACK(CPUMMICROARCH) pdmR3DevHlp_CpuGetGuestMicroarch(PPDMDEVINS pDevIns)
     
    12011215    PDMDEV_ASSERT_DEVINS(pDevIns);
    12021216    int rc = VMSetRuntimeErrorV(pDevIns->Internal.s.pVMR3, fFlags, pszErrorId, pszFormat, va);
     1217    return rc;
     1218}
     1219
     1220
     1221/** @interface_method_impl{PDMDEVHLPR3,pfnVMWaitForDeviceReady} */
     1222static DECLCALLBACK(int) pdmR3DevHlp_VMWaitForDeviceReady(PPDMDEVINS pDevIns, VMCPUID idCpu)
     1223{
     1224    PDMDEV_ASSERT_DEVINS(pDevIns);
     1225    LogFlow(("pdmR3DevHlp_VMWaitForDeviceReady: caller='%s'/%d: idCpu=%u\n", pDevIns->pReg->szName, pDevIns->iInstance, idCpu));
     1226
     1227    int rc = VMR3WaitForDeviceReady(pDevIns->Internal.s.pVMR3, idCpu);
     1228
     1229    LogFlow(("pdmR3DevHlp_VMWaitForDeviceReady: caller='%s'/%d: returns %Rrc\n",
     1230             pDevIns->pReg->szName, pDevIns->iInstance, rc));
     1231    return rc;
     1232}
     1233
     1234
     1235/** @interface_method_impl{PDMDEVHLPR3,pfnVMNotifyCpuDeviceReady} */
     1236static DECLCALLBACK(int) pdmR3DevHlp_VMNotifyCpuDeviceReady(PPDMDEVINS pDevIns, VMCPUID idCpu)
     1237{
     1238    PDMDEV_ASSERT_DEVINS(pDevIns);
     1239    LogFlow(("pdmR3DevHlp_VMNotifyCpuDeviceReady: caller='%s'/%d: idCpu=%u\n", pDevIns->pReg->szName, pDevIns->iInstance, idCpu));
     1240
     1241    int rc = VMR3NotifyCpuDeviceReady(pDevIns->Internal.s.pVMR3, idCpu);
     1242
     1243    LogFlow(("pdmR3DevHlp_VMNotifyCpuDeviceReady: caller='%s'/%d: returns %Rrc\n",
     1244             pDevIns->pReg->szName, pDevIns->iInstance, rc));
     1245    return rc;
     1246}
     1247
     1248
     1249/** @interface_method_impl{PDMDEVHLPR3,pfnVMReqCallNoWaitV} */
     1250static DECLCALLBACK(int) pdmR3DevHlp_VMReqCallNoWaitV(PPDMDEVINS pDevIns, VMCPUID idDstCpu, PFNRT pfnFunction, unsigned cArgs, va_list Args)
     1251{
     1252    PDMDEV_ASSERT_DEVINS(pDevIns);
     1253    LogFlow(("pdmR3DevHlp_VMReqCallNoWaitV: caller='%s'/%d: idDstCpu=%u pfnFunction=%p cArgs=%u\n",
     1254             pDevIns->pReg->szName, pDevIns->iInstance, idDstCpu, pfnFunction, cArgs));
     1255
     1256    int rc = VMR3ReqCallVU(pDevIns->Internal.s.pVMR3->pUVM, idDstCpu, NULL, 0, VMREQFLAGS_VBOX_STATUS | VMREQFLAGS_NO_WAIT,
     1257                           pfnFunction, cArgs, Args);
     1258
     1259    LogFlow(("pdmR3DevHlp_VMReqCallNoWaitV: caller='%s'/%d: returns %Rrc\n",
     1260             pDevIns->pReg->szName, pDevIns->iInstance, rc));
     1261    return rc;
     1262}
     1263
     1264
     1265/** @interface_method_impl{PDMDEVHLPR3,pfnVMReqPriorityCallWaitV} */
     1266static DECLCALLBACK(int) pdmR3DevHlp_VMReqPriorityCallWaitV(PPDMDEVINS pDevIns, VMCPUID idDstCpu, PFNRT pfnFunction, unsigned cArgs, va_list Args)
     1267{
     1268    PDMDEV_ASSERT_DEVINS(pDevIns);
     1269    LogFlow(("pdmR3DevHlp_VMReqCallNoWaitV: caller='%s'/%d: idDstCpu=%u pfnFunction=%p cArgs=%u\n",
     1270             pDevIns->pReg->szName, pDevIns->iInstance, idDstCpu, pfnFunction, cArgs));
     1271
     1272    PVMREQ pReq;
     1273    int rc = VMR3ReqCallVU(pDevIns->Internal.s.pVMR3->pUVM, idDstCpu, &pReq, RT_INDEFINITE_WAIT, VMREQFLAGS_VBOX_STATUS | VMREQFLAGS_PRIORITY,
     1274                           pfnFunction, cArgs, Args);
     1275    if (RT_SUCCESS(rc))
     1276        rc = pReq->iStatus;
     1277    VMR3ReqFree(pReq);
     1278
     1279    LogFlow(("pdmR3DevHlp_VMReqCallNoWaitV: caller='%s'/%d: returns %Rrc\n",
     1280             pDevIns->pReg->szName, pDevIns->iInstance, rc));
    12031281    return rc;
    12041282}
     
    42724350    LogFlow(("pdmR3DevHlp_GetCpuId: caller='%s'/%d: returns void - *pEax=%#x *pEbx=%#x *pEcx=%#x *pEdx=%#x\n",
    42734351             pDevIns->pReg->szName, pDevIns->iInstance, *pEax, *pEbx, *pEcx, *pEdx));
     4352}
     4353
     4354
     4355/** @interface_method_impl{PDMDEVHLPR3,pfnVMMRegisterPatchMemory} */
     4356static DECLCALLBACK(int) pdmR3DevHlp_VMMRegisterPatchMemory(PPDMDEVINS pDevIns, RTGCPTR GCPtrPatchMem, uint32_t cbPatchMem)
     4357{
     4358    PDMDEV_ASSERT_DEVINS(pDevIns); RT_NOREF(pDevIns);
     4359
     4360    LogFlow(("pdmR3DevHlp_VMMRegisterPatchMemory: caller='%s'/%d: GCPtrPatchMem=%RGv cbPatchMem=%RU32\n",
     4361             pDevIns->pReg->szName, pDevIns->iInstance, GCPtrPatchMem, cbPatchMem));
     4362
     4363    int rc = VMMR3RegisterPatchMemory(pDevIns->Internal.s.pVMR3, GCPtrPatchMem, cbPatchMem);
     4364
     4365    LogFlow(("pdmR3DevHlp_VMMRegisterPatchMemory: caller='%s'/%d: returns %Rrc\n", pDevIns->pReg->szName, pDevIns->iInstance, rc));
     4366    return rc;
     4367}
     4368
     4369
     4370/** @interface_method_impl{PDMDEVHLPR3,pfnVMMDeregisterPatchMemory} */
     4371static DECLCALLBACK(int) pdmR3DevHlp_VMMDeregisterPatchMemory(PPDMDEVINS pDevIns, RTGCPTR GCPtrPatchMem, uint32_t cbPatchMem)
     4372{
     4373    PDMDEV_ASSERT_DEVINS(pDevIns); RT_NOREF(pDevIns);
     4374
     4375    LogFlow(("pdmR3DevHlp_VMMDeregisterPatchMemory: caller='%s'/%d: GCPtrPatchMem=%RGv cbPatchMem=%RU32\n",
     4376             pDevIns->pReg->szName, pDevIns->iInstance, GCPtrPatchMem, cbPatchMem));
     4377
     4378    int rc = VMMR3DeregisterPatchMemory(pDevIns->Internal.s.pVMR3, GCPtrPatchMem, cbPatchMem);
     4379
     4380    LogFlow(("pdmR3DevHlp_VMMDeregisterPatchMemory: caller='%s'/%d: returns %Rrc\n", pDevIns->pReg->szName, pDevIns->iInstance, rc));
     4381    return rc;
    42744382}
    42754383
     
    44754583    pdmR3DevHlp_PhysWriteGCVirt,
    44764584    pdmR3DevHlp_PhysGCPtr2GCPhys,
     4585    pdmR3DevHlp_PhysIsGCPhysNormal,
    44774586    pdmR3DevHlp_MMHeapAlloc,
    44784587    pdmR3DevHlp_MMHeapAllocZ,
     
    44864595    pdmR3DevHlp_VMSetErrorV,
    44874596    pdmR3DevHlp_VMSetRuntimeErrorV,
     4597    pdmR3DevHlp_VMWaitForDeviceReady,
     4598    pdmR3DevHlp_VMNotifyCpuDeviceReady,
     4599    pdmR3DevHlp_VMReqCallNoWaitV,
     4600    pdmR3DevHlp_VMReqPriorityCallWaitV,
    44884601    pdmR3DevHlp_DBGFStopV,
    44894602    pdmR3DevHlp_DBGFInfoRegister,
     
    46334746    pdmR3DevHlp_QueryGenericUserObject,
    46344747    pdmR3DevHlp_PGMHandlerPhysicalTypeRegister,
     4748    pdmR3DevHlp_VMMRegisterPatchMemory,
     4749    pdmR3DevHlp_VMMDeregisterPatchMemory,
    46354750    PDM_DEVHLPR3_VERSION /* the end */
    46364751};
     
    48384953    pdmR3DevHlp_PhysWriteGCVirt,
    48394954    pdmR3DevHlp_PhysGCPtr2GCPhys,
     4955    pdmR3DevHlp_PhysIsGCPhysNormal,
    48404956    pdmR3DevHlp_MMHeapAlloc,
    48414957    pdmR3DevHlp_MMHeapAllocZ,
     
    48494965    pdmR3DevHlp_VMSetErrorV,
    48504966    pdmR3DevHlp_VMSetRuntimeErrorV,
     4967    pdmR3DevHlp_VMWaitForDeviceReady,
     4968    pdmR3DevHlp_VMNotifyCpuDeviceReady,
     4969    pdmR3DevHlp_VMReqCallNoWaitV,
     4970    pdmR3DevHlp_VMReqPriorityCallWaitV,
    48514971    pdmR3DevHlp_DBGFStopV,
    48524972    pdmR3DevHlp_DBGFInfoRegister,
     
    49965116    pdmR3DevHlp_QueryGenericUserObject,
    49975117    pdmR3DevHlp_PGMHandlerPhysicalTypeRegister,
     5118    pdmR3DevHlp_VMMRegisterPatchMemory,
     5119    pdmR3DevHlp_VMMDeregisterPatchMemory,
    49985120    PDM_DEVHLPR3_VERSION /* the end */
    49995121};
     
    51525274    PDMDEV_ASSERT_DEVINS(pDevIns);
    51535275    RT_NOREF(enmKind, pfnHandlerR3, pszHandlerR0, pszPfHandlerR0, pszHandlerRC, pszPfHandlerRC, pszDesc, phType);
     5276    AssertReleaseMsgFailed(("Untrusted device called trusted helper! '%s'/%d\n",
     5277                            pDevIns->pReg->szName, pDevIns->iInstance));
     5278    return VERR_ACCESS_DENIED;
     5279}
     5280
     5281
     5282/** @interface_method_impl{PDMDEVHLPR3,pfnVMMRegisterPatchMemory} */
     5283static DECLCALLBACK(int) pdmR3DevHlp_Untrusted_VMMRegisterPatchMemory(PPDMDEVINS pDevIns, RTGCPTR GCPtrPatchMem, uint32_t cbPatchMem)
     5284{
     5285    PDMDEV_ASSERT_DEVINS(pDevIns);
     5286    RT_NOREF(GCPtrPatchMem, cbPatchMem);
     5287    AssertReleaseMsgFailed(("Untrusted device called trusted helper! '%s'/%d\n",
     5288                            pDevIns->pReg->szName, pDevIns->iInstance));
     5289    return VERR_ACCESS_DENIED;
     5290}
     5291
     5292
     5293/** @interface_method_impl{PDMDEVHLPR3,pfnVMMDeregisterPatchMemory} */
     5294static DECLCALLBACK(int) pdmR3DevHlp_Untrusted_VMMDeregisterPatchMemory(PPDMDEVINS pDevIns, RTGCPTR GCPtrPatchMem, uint32_t cbPatchMem)
     5295{
     5296    PDMDEV_ASSERT_DEVINS(pDevIns);
     5297    RT_NOREF(GCPtrPatchMem, cbPatchMem);
    51545298    AssertReleaseMsgFailed(("Untrusted device called trusted helper! '%s'/%d\n",
    51555299                            pDevIns->pReg->szName, pDevIns->iInstance));
     
    53585502    pdmR3DevHlp_PhysWriteGCVirt,
    53595503    pdmR3DevHlp_PhysGCPtr2GCPhys,
     5504    pdmR3DevHlp_PhysIsGCPhysNormal,
    53605505    pdmR3DevHlp_MMHeapAlloc,
    53615506    pdmR3DevHlp_MMHeapAllocZ,
     
    53695514    pdmR3DevHlp_VMSetErrorV,
    53705515    pdmR3DevHlp_VMSetRuntimeErrorV,
     5516    pdmR3DevHlp_VMWaitForDeviceReady,
     5517    pdmR3DevHlp_VMNotifyCpuDeviceReady,
     5518    pdmR3DevHlp_VMReqCallNoWaitV,
     5519    pdmR3DevHlp_VMReqPriorityCallWaitV,
    53715520    pdmR3DevHlp_DBGFStopV,
    53725521    pdmR3DevHlp_DBGFInfoRegister,
     
    55165665    pdmR3DevHlp_Untrusted_QueryGenericUserObject,
    55175666    pdmR3DevHlp_Untrusted_PGMHandlerPhysicalTypeRegister,
     5667    pdmR3DevHlp_Untrusted_VMMRegisterPatchMemory,
     5668    pdmR3DevHlp_Untrusted_VMMDeregisterPatchMemory,
    55185669    PDM_DEVHLPR3_VERSION /* the end */
    55195670};
Note: See TracChangeset for help on using the changeset viewer.

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