Lines Matching refs:pDevExt

181 static void supdrvVtgReleaseObjectCopy(PSUPDRVDEVEXT pDevExt, PSUPDRVVTGCOPY pThis);
718 * @param pDevExt The device extension.
723 static void supdrvTracerDeregisterVtgObj(PSUPDRVDEVEXT pDevExt, PSUPDRVTPPROVIDER pProv)
735 if (!pProv->fRegistered || !pDevExt->pTracerOps)
738 rc = pDevExt->pTracerOps->pfnProviderDeregister(pDevExt->pTracerOps, &pProv->Core);
756 RTListAppend(&pDevExt->TracerProviderZombieList, &pProv->ListEntry);
765 * @param pDevExt The device extension.
767 static void supdrvTracerProcessZombies(PSUPDRVDEVEXT pDevExt)
771 RTSemFastMutexRequest(pDevExt->mtxTracer);
772 RTListForEachSafe(&pDevExt->TracerProviderZombieList, pProv, pProvNext, SUPDRVTPPROVIDER, ListEntry)
774 int rc = pDevExt->pTracerOps->pfnProviderDeregisterZombie(pDevExt->pTracerOps, &pProv->Core);
781 RTSemFastMutexRelease(pDevExt->mtxTracer);
791 * @param pDevExt The device extension.
793 static void supdrvTracerRemoveAllProviders(PSUPDRVDEVEXT pDevExt)
802 RTSemFastMutexRequest(pDevExt->mtxTracer);
803 RTListForEachSafe(&pDevExt->TracerProviderList, pProv, pProvNext, SUPDRVTPPROVIDER, ListEntry)
805 supdrvTracerDeregisterVtgObj(pDevExt, pProv);
807 RTSemFastMutexRelease(pDevExt->mtxTracer);
816 RTSemFastMutexRequest(pDevExt->mtxTracer);
819 RTListForEachSafe(&pDevExt->TracerProviderZombieList, pProv, pProvNext, SUPDRVTPPROVIDER, ListEntry)
825 if (pDevExt->pTracerOps)
826 rc = pDevExt->pTracerOps->pfnProviderDeregisterZombie(pDevExt->pTracerOps, &pProv->Core);
842 fEmpty = RTListIsEmpty(&pDevExt->TracerProviderZombieList);
845 if ( pDevExt->cTracerOpens
846 && pDevExt->pTracerOps)
850 SUPR0Printf("supdrvTracerRemoveAllProviders: Waiting on %u opens\n", pDevExt->cTracerOpens);
852 LOG_TRACER(("supdrvTracerRemoveAllProviders: Waiting on %u opens\n", pDevExt->cTracerOpens));
855 RTSemFastMutexRelease(pDevExt->mtxTracer);
878 static int supdrvTracerRegisterVtgObj(PSUPDRVDEVEXT pDevExt, PVTGOBJHDR pVtgHdr, PSUPDRVLDRIMAGE pImage,
889 AssertPtrReturn(pDevExt, VERR_INVALID_POINTER);
909 rc = RTSemFastMutexRequest(pDevExt->mtxTracer);
914 RTListForEach(&pDevExt->TracerProviderList, pProv, SUPDRVTPPROVIDER, ListEntry)
941 RTSemFastMutexRelease(pDevExt->mtxTracer);
999 rc = RTSemFastMutexRequest(pDevExt->mtxTracer);
1002 if ( pDevExt->pTracerOps
1003 && !pDevExt->fTracerUnloading)
1004 rc = pDevExt->pTracerOps->pfnProviderRegister(pDevExt->pTracerOps, &pProv->Core);
1012 RTListAppend(&pDevExt->TracerProviderList, &pProv->ListEntry);
1020 RTSemFastMutexRelease(pDevExt->mtxTracer);
1026 RTSemFastMutexRelease(pDevExt->mtxTracer);
1046 RTSemFastMutexRequest(pDevExt->mtxTracer);
1049 RTListForEachReverseSafe(&pDevExt->TracerProviderList, pProv, pProvNext, SUPDRVTPPROVIDER, ListEntry)
1052 supdrvTracerDeregisterVtgObj(pDevExt, pProv);
1060 supdrvTracerDeregisterVtgObj(pDevExt, pProv);
1063 RTSemFastMutexRelease(pDevExt->mtxTracer);
1090 rc = supdrvTracerRegisterVtgObj(pSession->pDevExt, pVtgHdr, NULL /*pImage*/, pSession, NULL /*pUmod*/, pszName);
1095 supdrvTracerProcessZombies(pSession->pDevExt);
1110 PSUPDRVDEVEXT pDevExt;
1115 pDevExt = pSession->pDevExt;
1120 RTSemFastMutexRequest(pDevExt->mtxTracer);
1123 supdrvTracerDeregisterVtgObj(pDevExt, pProv);
1125 RTSemFastMutexRelease(pDevExt->mtxTracer);
1130 supdrvTracerProcessZombies(pDevExt);
1147 PSUPDRVDEVEXT pDevExt;
1159 pDevExt = pImage->pDevExt;
1160 AssertPtrReturn(pDevExt, VERR_INVALID_POINTER);
1161 AssertReturn(pDevExt->pLdrInitImage == pImage, VERR_WRONG_ORDER);
1162 AssertReturn(pDevExt->hLdrInitThread == RTThreadNativeSelf(), VERR_WRONG_ORDER);
1168 rc = supdrvTracerRegisterVtgObj(pDevExt, pVtgHdr, pImage, NULL /*pSession*/, NULL /*pUmod*/, pImage->szName);
1174 supdrvTracerProcessZombies(pDevExt);
1194 PSUPDRVDEVEXT pDevExt;
1210 pDevExt = pImage->pDevExt;
1211 AssertPtrReturn(pDevExt, VERR_INVALID_POINTER);
1212 AssertReturn(pDevExt->pLdrInitImage == pImage, VERR_WRONG_ORDER);
1213 AssertReturn(pDevExt->hLdrInitThread == RTThreadNativeSelf(), VERR_WRONG_ORDER);
1219 pDevExt = pSession->pDevExt;
1220 AssertPtrReturn(pDevExt, VERR_INVALID_POINTER);
1238 rc = RTSemFastMutexRequest(pDevExt->mtxTracer);
1241 if (!pDevExt->pTracerOps)
1244 pDevExt->pTracerOps = pReg;
1245 pDevExt->pTracerSession = pSession;
1246 pDevExt->pTracerImage = pImage;
1248 g_pfnSupdrvProbeFireKernel = (PFNRT)pDevExt->pTracerOps->pfnProbeFireKernel;
1250 *ppHlp = &pDevExt->TracerHlp;
1256 RTListForEach(&pDevExt->TracerProviderList, pProv, SUPDRVTPPROVIDER, ListEntry)
1260 rc2 = pDevExt->pTracerOps->pfnProviderRegister(pDevExt->pTracerOps, &pProv->Core);
1271 RTSemFastMutexRelease(pDevExt->mtxTracer);
1284 * @param pDevExt The device extension structure.
1286 static void supdrvTracerCommonDeregisterImpl(PSUPDRVDEVEXT pDevExt)
1292 RTSemFastMutexRequest(pDevExt->mtxTracer);
1308 RTListForEachSafe(&pDevExt->TracerProviderList, pProv, pProvNext, SUPDRVTPPROVIDER, ListEntry)
1318 rc = pDevExt->pTracerOps->pfnProviderDeregister(pDevExt->pTracerOps, &pProv->Core);
1323 rc = pDevExt->pTracerOps->pfnProviderDeregisterZombie(pDevExt->pTracerOps, &pProv->Core);
1339 RTListForEachSafe(&pDevExt->TracerProviderZombieList, pProv, pProvNext, SUPDRVTPPROVIDER, ListEntry)
1345 rc = pDevExt->pTracerOps->pfnProviderDeregisterZombie(pDevExt->pTracerOps, &pProv->Core);
1364 if (pDevExt->cTracerOpens)
1368 SUPR0Printf("supdrvTracerCommonDeregisterImpl: Waiting on %u opens\n", pDevExt->cTracerOpens);
1370 LOG_TRACER(("supdrvTracerCommonDeregisterImpl: Waiting on %u opens\n", pDevExt->cTracerOpens));
1374 if (pDevExt->cTracerCallers)
1378 SUPR0Printf("supdrvTracerCommonDeregisterImpl: Waiting on %u callers\n", pDevExt->cTracerCallers);
1380 LOG_TRACER(("supdrvTracerCommonDeregisterImpl: Waiting on %u callers\n", pDevExt->cTracerCallers));
1388 RTSemFastMutexRelease(pDevExt->mtxTracer);
1390 RTSemFastMutexRequest(pDevExt->mtxTracer);
1396 pDevExt->pTracerImage = NULL;
1397 pDevExt->pTracerSession = NULL;
1398 pDevExt->pTracerOps = NULL;
1399 pDevExt->fTracerUnloading = false;
1401 RTSemFastMutexRelease(pDevExt->mtxTracer);
1417 PSUPDRVDEVEXT pDevExt;
1427 pDevExt = pImage->pDevExt;
1433 pDevExt = pSession->pDevExt;
1435 AssertPtrReturn(pDevExt, VERR_INVALID_POINTER);
1440 rc = RTSemFastMutexRequest(pDevExt->mtxTracer);
1444 ? pDevExt->pTracerImage == pImage
1445 : pDevExt->pTracerSession == pSession)
1448 pDevExt->fTracerUnloading = true;
1449 RTSemFastMutexRelease(pDevExt->mtxTracer);
1450 supdrvTracerCommonDeregisterImpl(pDevExt);
1456 RTSemFastMutexRelease(pDevExt->mtxTracer);
1510 * @param pDevExt The device extension structure.
1513 void VBOXCALL supdrvTracerModuleUnloading(PSUPDRVDEVEXT pDevExt, PSUPDRVLDRIMAGE pImage)
1518 RTSemFastMutexRequest(pDevExt->mtxTracer);
1523 if (pDevExt->pTracerImage == pImage)
1526 pDevExt->fTracerUnloading = true;
1527 RTSemFastMutexRelease(pDevExt->mtxTracer);
1528 supdrvTracerCommonDeregisterImpl(pDevExt);
1536 RTListForEachSafe(&pDevExt->TracerProviderList, pProv, pProvNext, SUPDRVTPPROVIDER, ListEntry)
1539 supdrvTracerDeregisterVtgObj(pDevExt, pProv);
1542 RTSemFastMutexRelease(pDevExt->mtxTracer);
1547 supdrvTracerProcessZombies(pDevExt);
1555 * @param pDevExt The device extension structure.
1558 void VBOXCALL supdrvTracerCleanupSession(PSUPDRVDEVEXT pDevExt, PSUPDRVSESSION pSession)
1565 RTSemFastMutexRequest(pDevExt->mtxTracer);
1568 supdrvTracerDeregisterVtgObj(pDevExt, pProv);
1570 RTSemFastMutexRelease(pDevExt->mtxTracer);
1576 supdrvIOCtl_TracerClose(pDevExt, pSession);
1597 supdrvVtgReleaseObjectCopy(pDevExt, pUmod->pVtgCopy);
1604 static void supdrvVtgReleaseObjectCopy(PSUPDRVDEVEXT pDevExt, PSUPDRVVTGCOPY pThis)
1609 RTSemFastMutexRequest(pDevExt->mtxTracer);
1612 RTSemFastMutexRelease(pDevExt->mtxTracer);
1678 * @param pDevExt The device extension.
1683 static PSUPDRVVTGCOPY supdrvVtgFindObjectCopy(PSUPDRVDEVEXT pDevExt, PCVTGOBJHDR pHdr, uint32_t cbStrTab, uint32_t fFlags)
1685 PRTLISTANCHOR pHashList = &pDevExt->aTrackerUmodHash[pHdr->Uuid.au8[3] % RT_ELEMENTS(pDevExt->aTrackerUmodHash)];
1688 int rc = RTSemFastMutexRequest(pDevExt->mtxTracer);
1693 RTSemFastMutexRelease(pDevExt->mtxTracer);
1702 * @param pDevExt The device extension.
1718 static int supdrvVtgCreateObjectCopy(PSUPDRVDEVEXT pDevExt, PCVTGOBJHDR pVtgHdr, RTR3PTR R3PtrVtgHdr, RTUINTPTR uVtgHdrAddr,
1821 PRTLISTANCHOR pHashList = &pDevExt->aTrackerUmodHash[ pVtgHdr->Uuid.au8[3]
1822 % RT_ELEMENTS(pDevExt->aTrackerUmodHash)];
1824 rc = RTSemFastMutexRequest(pDevExt->mtxTracer);
1832 RTSemFastMutexRelease(pDevExt->mtxTracer);
1840 RTSemFastMutexRelease(pDevExt->mtxTracer);
1853 * @param pDevExt The device extension.
1857 static void supdrvTracerUmodClearProbeIds(PSUPDRVDEVEXT pDevExt, PSUPDRVSESSION pSession, PSUPDRVTRACERUMOD pUmod)
1885 RTSemFastMutexRequest(pDevExt->mtxTracer);
1893 RTSemFastMutexRelease(pDevExt->mtxTracer);
1898 RTSemFastMutexRequest(pDevExt->mtxTracer);
1903 RTSemFastMutexRelease(pDevExt->mtxTracer);
1912 * @param pDevExt The device extension.
1916 static int supdrvTracerUmodSetProbeIds(PSUPDRVDEVEXT pDevExt, PSUPDRVSESSION pSession, PSUPDRVTRACERUMOD pUmod)
1924 RTSemFastMutexRequest(pDevExt->mtxTracer);
1934 RTSemFastMutexRelease(pDevExt->mtxTracer);
1961 int VBOXCALL supdrvIOCtl_TracerUmodRegister(PSUPDRVDEVEXT pDevExt, PSUPDRVSESSION pSession,
2054 pUmod->pVtgCopy = supdrvVtgFindObjectCopy(pDevExt, &Hdr, cbStrTab, fFlags);
2056 rc = supdrvVtgCreateObjectCopy(pDevExt, &Hdr, R3PtrVtgHdr, uVtgHdrAddr, R3PtrStrTab, cbStrTab, fFlags, pUmod);
2065 rc = supdrvTracerUmodSetProbeIds(pDevExt, pSession, pUmod);
2071 rc = supdrvTracerRegisterVtgObj(pDevExt, &pUmod->pVtgCopy->Hdr,
2075 RTSemFastMutexRequest(pDevExt->mtxTracer);
2077 RTSemFastMutexRelease(pDevExt->mtxTracer);
2083 supdrvTracerUmodClearProbeIds(pDevExt, pSession, pUmod);
2085 supdrvVtgReleaseObjectCopy(pDevExt, pUmod->pVtgCopy);
2097 int VBOXCALL supdrvIOCtl_TracerUmodDeregister(PSUPDRVDEVEXT pDevExt, PSUPDRVSESSION pSession, RTR3PTR R3PtrVtgHdr)
2106 RTSemFastMutexRequest(pDevExt->mtxTracer);
2115 RTSemFastMutexRelease(pDevExt->mtxTracer);
2126 supdrvTracerUmodClearProbeIds(pDevExt, pSession, pUmod);
2131 RTSemFastMutexRequest(pDevExt->mtxTracer);
2135 supdrvTracerDeregisterVtgObj(pDevExt, pProv);
2137 RTSemFastMutexRelease(pDevExt->mtxTracer);
2143 supdrvVtgReleaseObjectCopy(pDevExt, pUmod->pVtgCopy);
2159 * @param pDevExt The device extension.
2163 static void supdrvTracerUmodProbeFire(PSUPDRVDEVEXT pDevExt, PSUPDRVSESSION pSession, PSUPDRVTRACERUSRCTX pCtx)
2173 if (RT_UNLIKELY( !pDevExt->pTracerOps
2174 || pDevExt->fTracerUnloading))
2200 ASMAtomicIncU32(&pDevExt->cTracerCallers);
2202 if (RT_LIKELY( pDevExt->pTracerOps
2203 && !pDevExt->fTracerUnloading
2210 pDevExt->pTracerOps->pfnProbeFireUser(pDevExt->pTracerOps, pSession, pCtx, &pVtgCopy->Hdr, pProbeLocRO);
2212 ASMAtomicDecU32(&pDevExt->cTracerCallers);
2227 supdrvTracerUmodProbeFire(pSession->pDevExt, pSession, pCtx);
2231 void VBOXCALL supdrvIOCtl_TracerUmodProbeFire(PSUPDRVDEVEXT pDevExt, PSUPDRVSESSION pSession, PSUPDRVTRACERUSRCTX pCtx)
2233 supdrvTracerUmodProbeFire(pDevExt, pSession, pCtx);
2241 * @param pDevExt The device extension structure.
2246 int VBOXCALL supdrvIOCtl_TracerOpen(PSUPDRVDEVEXT pDevExt, PSUPDRVSESSION pSession, uint32_t uCookie, uintptr_t uArg)
2251 RTSemFastMutexRequest(pDevExt->mtxTracer);
2255 if (pDevExt->pTracerOps)
2257 if (pDevExt->pTracerSession != pSession)
2259 if (!pDevExt->fTracerUnloading)
2263 pDevExt->cTracerOpens++;
2266 RTSemFastMutexRelease(pDevExt->mtxTracer);
2268 rc = pDevExt->pTracerOps->pfnTracerOpen(pDevExt->pTracerOps, pSession, uCookie, uArg, &pSession->uTracerData);
2270 RTSemFastMutexRequest(pDevExt->mtxTracer);
2273 pDevExt->cTracerOpens--;
2293 RTSemFastMutexRelease(pDevExt->mtxTracer);
2302 * @param pDevExt The device extension structure.
2305 int VBOXCALL supdrvIOCtl_TracerClose(PSUPDRVDEVEXT pDevExt, PSUPDRVSESSION pSession)
2310 RTSemFastMutexRequest(pDevExt->mtxTracer);
2314 Assert(pDevExt->cTracerOpens > 0);
2316 if (pDevExt->pTracerOps)
2323 RTSemFastMutexRelease(pDevExt->mtxTracer);
2325 pDevExt->pTracerOps->pfnTracerClose(pDevExt->pTracerOps, pSession, uTracerData);
2328 RTSemFastMutexRequest(pDevExt->mtxTracer);
2330 Assert(pDevExt->cTracerOpens > 0);
2331 pDevExt->cTracerOpens--;
2340 Assert(pDevExt->cTracerOpens > 0);
2341 pDevExt->cTracerOpens--;
2347 RTSemFastMutexRelease(pDevExt->mtxTracer);
2356 * @param pDevExt The device extension structure.
2362 int VBOXCALL supdrvIOCtl_TracerIOCtl(PSUPDRVDEVEXT pDevExt, PSUPDRVSESSION pSession, uintptr_t uCmd, uintptr_t uArg, int32_t *piRetVal)
2368 RTSemFastMutexRequest(pDevExt->mtxTracer);
2372 Assert(pDevExt->cTracerOpens > 0);
2373 if (pDevExt->pTracerOps)
2375 if (!pDevExt->fTracerUnloading)
2380 pDevExt->cTracerOpens++;
2382 RTSemFastMutexRelease(pDevExt->mtxTracer);
2384 rc = pDevExt->pTracerOps->pfnTracerIoCtl(pDevExt->pTracerOps, pSession, uTracerData, uCmd, uArg, piRetVal);
2386 RTSemFastMutexRequest(pDevExt->mtxTracer);
2388 Assert(pDevExt->cTracerOpens > 0);
2389 pDevExt->cTracerOpens--;
2403 RTSemFastMutexRelease(pDevExt->mtxTracer);
2412 * @param pDevExt The device extension structure.
2414 int VBOXCALL supdrvTracerInit(PSUPDRVDEVEXT pDevExt)
2419 int rc = RTSemFastMutexCreate(&pDevExt->mtxTracer);
2424 pDevExt->TracerHlp.uVersion = SUPDRVTRACERHLP_VERSION;
2426 pDevExt->TracerHlp.uEndVersion = SUPDRVTRACERHLP_VERSION;
2427 RTListInit(&pDevExt->TracerProviderList);
2428 RTListInit(&pDevExt->TracerProviderZombieList);
2429 for (i = 0; i < RT_ELEMENTS(pDevExt->aTrackerUmodHash); i++)
2430 RTListInit(&pDevExt->aTrackerUmodHash[i]);
2433 pDevExt->pTracerOps = supdrvDTraceInit();
2434 if (pDevExt->pTracerOps)
2435 g_pfnSupdrvProbeFireKernel = (PFNRT)pDevExt->pTracerOps->pfnProbeFireKernel;
2442 rc = supdrvTracerRegisterVtgObj(pDevExt, &g_VTGObjHeader, NULL /*pImage*/, NULL /*pSession*/, NULL /*pUmod*/, "vboxdrv");
2446 RTSemFastMutexDestroy(pDevExt->mtxTracer);
2452 pDevExt->mtxTracer = NIL_RTSEMFASTMUTEX;
2461 * @param pDevExt The device extension structure.
2463 void VBOXCALL supdrvTracerTerm(PSUPDRVDEVEXT pDevExt)
2467 supdrvTracerRemoveAllProviders(pDevExt);
2469 RTSemFastMutexDestroy(pDevExt->mtxTracer);
2470 pDevExt->mtxTracer = NIL_RTSEMFASTMUTEX;