diff --git a/unified-runtime/source/loader/layers/sanitizer/asan/asan_buffer.cpp b/unified-runtime/source/loader/layers/sanitizer/asan/asan_buffer.cpp index 2bc055caa0ff7..97150655be9f3 100644 --- a/unified-runtime/source/loader/layers/sanitizer/asan/asan_buffer.cpp +++ b/unified-runtime/source/loader/layers/sanitizer/asan/asan_buffer.cpp @@ -66,6 +66,9 @@ ur_result_t EnqueueMemCopyRectHelper( UR_CALL(getContext()->urDdiTable.Enqueue.pfnEventsWait(Queue, Events.size(), Events.data(), Event)); + for (const auto &E : Events) + UR_CALL(getContext()->urDdiTable.Event.pfnRelease(E)); + return UR_RESULT_SUCCESS; } diff --git a/unified-runtime/source/loader/layers/sanitizer/msan/msan_buffer.cpp b/unified-runtime/source/loader/layers/sanitizer/msan/msan_buffer.cpp index 8cd7b7308bab9..a98d0a8a3a2cc 100644 --- a/unified-runtime/source/loader/layers/sanitizer/msan/msan_buffer.cpp +++ b/unified-runtime/source/loader/layers/sanitizer/msan/msan_buffer.cpp @@ -106,6 +106,9 @@ ur_result_t EnqueueMemCopyRectHelper( &Events[0], Event)); } + for (const auto &E : Events) + UR_CALL(getContext()->urDdiTable.Event.pfnRelease(E)); + return UR_RESULT_SUCCESS; } diff --git a/unified-runtime/source/loader/layers/sanitizer/msan/msan_ddi.cpp b/unified-runtime/source/loader/layers/sanitizer/msan/msan_ddi.cpp index 9557257469796..3b4a9df10c223 100644 --- a/unified-runtime/source/loader/layers/sanitizer/msan/msan_ddi.cpp +++ b/unified-runtime/source/loader/layers/sanitizer/msan/msan_ddi.cpp @@ -831,6 +831,9 @@ ur_result_t urEnqueueMemBufferWrite( UR_CALL(getContext()->urDdiTable.Enqueue.pfnEventsWait( hQueue, Events.size(), Events.data(), phEvent)); } + + for (const auto &E : Events) + UR_CALL(getContext()->urDdiTable.Event.pfnRelease(E)); } else { UR_CALL(pfnMemBufferWrite(hQueue, hBuffer, blockingWrite, offset, size, pSrc, numEventsInWaitList, phEventWaitList, @@ -1029,6 +1032,9 @@ ur_result_t urEnqueueMemBufferCopy( UR_CALL(getContext()->urDdiTable.Enqueue.pfnEventsWait( hQueue, Events.size(), Events.data(), phEvent)); } + + for (const auto &E : Events) + UR_CALL(getContext()->urDdiTable.Event.pfnRelease(E)); } else { UR_CALL(pfnMemBufferCopy(hQueue, hBufferSrc, hBufferDst, srcOffset, dstOffset, size, numEventsInWaitList, @@ -1159,6 +1165,9 @@ ur_result_t urEnqueueMemBufferFill( UR_CALL(getContext()->urDdiTable.Enqueue.pfnEventsWait( hQueue, Events.size(), Events.data(), phEvent)); } + + for (const auto &E : Events) + UR_CALL(getContext()->urDdiTable.Event.pfnRelease(E)); } else { UR_CALL(pfnMemBufferFill(hQueue, hBuffer, pPattern, patternSize, offset, size, numEventsInWaitList, phEventWaitList, @@ -1487,6 +1496,9 @@ ur_result_t UR_APICALL urEnqueueUSMFill( hQueue, Events.size(), Events.data(), phEvent)); } + for (const auto &E : Events) + UR_CALL(getContext()->urDdiTable.Event.pfnRelease(E)); + return UR_RESULT_SUCCESS; } @@ -1558,6 +1570,9 @@ ur_result_t UR_APICALL urEnqueueUSMMemcpy( hQueue, Events.size(), Events.data(), phEvent)); } + for (const auto &E : Events) + UR_CALL(getContext()->urDdiTable.Event.pfnRelease(E)); + return UR_RESULT_SUCCESS; } @@ -1621,6 +1636,9 @@ ur_result_t UR_APICALL urEnqueueUSMFill2D( hQueue, Events.size(), Events.data(), phEvent)); } + for (const auto &E : Events) + UR_CALL(getContext()->urDdiTable.Event.pfnRelease(E)); + return UR_RESULT_SUCCESS; } @@ -1703,6 +1721,9 @@ ur_result_t UR_APICALL urEnqueueUSMMemcpy2D( hQueue, Events.size(), Events.data(), phEvent)); } + for (const auto &E : Events) + UR_CALL(getContext()->urDdiTable.Event.pfnRelease(E)); + return UR_RESULT_SUCCESS; } diff --git a/unified-runtime/source/loader/layers/sanitizer/msan/msan_shadow.cpp b/unified-runtime/source/loader/layers/sanitizer/msan/msan_shadow.cpp index ef54faeba18d7..869450ca2f4c2 100644 --- a/unified-runtime/source/loader/layers/sanitizer/msan/msan_shadow.cpp +++ b/unified-runtime/source/loader/layers/sanitizer/msan/msan_shadow.cpp @@ -166,6 +166,16 @@ ur_result_t MsanShadowMemoryGPU::Destory() { static ur_result_t Result = [this]() { auto Result = getContext()->urDdiTable.VirtualMem.pfnFree( Context, (const void *)ShadowBegin, GetShadowSize()); + if (PrivateShadowOffset != 0) { + UR_CALL(getContext()->urDdiTable.USM.pfnFree( + Context, (void *)PrivateShadowOffset)); + PrivateShadowOffset = 0; + } + if (LocalShadowOffset != 0) { + UR_CALL(getContext()->urDdiTable.USM.pfnFree(Context, + (void *)LocalShadowOffset)); + LocalShadowOffset = 0; + } getContext()->urDdiTable.Context.pfnRelease(Context); return Result; }(); diff --git a/unified-runtime/source/loader/layers/sanitizer/tsan/tsan_buffer.cpp b/unified-runtime/source/loader/layers/sanitizer/tsan/tsan_buffer.cpp index aca20567fd2f9..b6f8ad0eb8159 100644 --- a/unified-runtime/source/loader/layers/sanitizer/tsan/tsan_buffer.cpp +++ b/unified-runtime/source/loader/layers/sanitizer/tsan/tsan_buffer.cpp @@ -74,6 +74,9 @@ ur_result_t EnqueueMemCopyRectHelper( &Events[0], Event)); } + for (const auto &E : Events) + UR_CALL(getContext()->urDdiTable.Event.pfnRelease(E)); + return UR_RESULT_SUCCESS; } diff --git a/unified-runtime/source/loader/layers/sanitizer/tsan/tsan_ddi.cpp b/unified-runtime/source/loader/layers/sanitizer/tsan/tsan_ddi.cpp index e6039c6077914..2212f8b7617bf 100644 --- a/unified-runtime/source/loader/layers/sanitizer/tsan/tsan_ddi.cpp +++ b/unified-runtime/source/loader/layers/sanitizer/tsan/tsan_ddi.cpp @@ -484,18 +484,10 @@ ur_result_t urEnqueueMemBufferWrite( if (auto MemBuffer = getTsanInterceptor()->getMemBuffer(hBuffer)) { ur_device_handle_t Device = GetDevice(hQueue); char *pDst = nullptr; - std::vector Events; - ur_event_handle_t Event{}; UR_CALL(MemBuffer->getHandle(Device, pDst)); UR_CALL(getContext()->urDdiTable.Enqueue.pfnUSMMemcpy( hQueue, blockingWrite, pDst + offset, pSrc, size, numEventsInWaitList, - phEventWaitList, &Event)); - Events.push_back(Event); - - if (phEvent) { - UR_CALL(getContext()->urDdiTable.Enqueue.pfnEventsWait( - hQueue, Events.size(), Events.data(), phEvent)); - } + phEventWaitList, phEvent)); } else { UR_CALL(getContext()->urDdiTable.Enqueue.pfnMemBufferWrite( hQueue, hBuffer, blockingWrite, offset, size, pSrc, numEventsInWaitList, @@ -664,17 +656,9 @@ ur_result_t urEnqueueMemBufferCopy( char *DstHandle = nullptr; UR_CALL(DstBuffer->getHandle(Device, DstHandle)); - std::vector Events; - ur_event_handle_t Event{}; UR_CALL(getContext()->urDdiTable.Enqueue.pfnUSMMemcpy( hQueue, false, DstHandle + dstOffset, SrcHandle + srcOffset, size, - numEventsInWaitList, phEventWaitList, &Event)); - Events.push_back(Event); - - if (phEvent) { - UR_CALL(getContext()->urDdiTable.Enqueue.pfnEventsWait( - hQueue, Events.size(), Events.data(), phEvent)); - } + numEventsInWaitList, phEventWaitList, phEvent)); } else { UR_CALL(getContext()->urDdiTable.Enqueue.pfnMemBufferCopy( hQueue, hBufferSrc, hBufferDst, srcOffset, dstOffset, size, @@ -776,19 +760,11 @@ ur_result_t urEnqueueMemBufferFill( if (auto MemBuffer = getTsanInterceptor()->getMemBuffer(hBuffer)) { char *Handle = nullptr; - std::vector Events; - ur_event_handle_t Event{}; ur_device_handle_t Device = GetDevice(hQueue); UR_CALL(MemBuffer->getHandle(Device, Handle)); UR_CALL(getContext()->urDdiTable.Enqueue.pfnUSMFill( hQueue, Handle + offset, patternSize, pPattern, size, - numEventsInWaitList, phEventWaitList, &Event)); - Events.push_back(Event); - - if (phEvent) { - UR_CALL(getContext()->urDdiTable.Enqueue.pfnEventsWait( - hQueue, Events.size(), Events.data(), phEvent)); - } + numEventsInWaitList, phEventWaitList, phEvent)); } else { UR_CALL(getContext()->urDdiTable.Enqueue.pfnMemBufferFill( hQueue, hBuffer, pPattern, patternSize, offset, size,