From d2aebaa590c1f88a82a5703254aa2ee70db516ce Mon Sep 17 00:00:00 2001 From: "Zhao, Maosu" Date: Mon, 13 Jan 2025 23:25:19 -0800 Subject: [PATCH 1/2] [DevMSAN] Support device memory sanitizer for DG2 GPU device --- source/loader/layers/sanitizer/msan/msan_shadow.cpp | 2 +- source/loader/layers/sanitizer/msan/msan_shadow.hpp | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/source/loader/layers/sanitizer/msan/msan_shadow.cpp b/source/loader/layers/sanitizer/msan/msan_shadow.cpp index 2cdf8600d2..3012a91c2d 100644 --- a/source/loader/layers/sanitizer/msan/msan_shadow.cpp +++ b/source/loader/layers/sanitizer/msan/msan_shadow.cpp @@ -142,7 +142,7 @@ ur_result_t MsanShadowMemoryGPU::Setup() { // To reserve very large amount of GPU virtual memroy, the pStart param should be beyond // the SVM range, so that GFX driver will automatically switch to reservation on the GPU // heap. - const void *StartAddress = (void *)(0x100'0000'0000'0000ULL); + const void *StartAddress = (void *)GetStartAddress(); // TODO: Protect Bad Zone auto Result = getContext()->urDdiTable.VirtualMem.pfnReserve( Context, StartAddress, ShadowSize, (void **)&ShadowBegin); diff --git a/source/loader/layers/sanitizer/msan/msan_shadow.hpp b/source/loader/layers/sanitizer/msan/msan_shadow.hpp index ca5791385c..1a41e7de1a 100644 --- a/source/loader/layers/sanitizer/msan/msan_shadow.hpp +++ b/source/loader/layers/sanitizer/msan/msan_shadow.hpp @@ -102,6 +102,8 @@ struct MsanShadowMemoryGPU : public MsanShadowMemory { virtual size_t GetShadowSize() = 0; + virtual uptr GetStartAddress() { return 0; } + private: ur_result_t EnqueueMapShadow(ur_queue_handle_t Queue, uptr Ptr, uptr Size, std::vector &EventWaitList, @@ -133,6 +135,8 @@ struct MsanShadowMemoryPVC final : public MsanShadowMemoryGPU { uptr MemToShadow(uptr Ptr) override; size_t GetShadowSize() override { return 0x8000'0000'0000ULL; } + + uptr GetStartAddress() override { return 0x100'0000'0000'0000ULL; } }; /// Shadow Memory layout of GPU DG2 device From e7a95abab3a644826878259881c32d5b58dc62e0 Mon Sep 17 00:00:00 2001 From: "Zhao, Maosu" Date: Wed, 22 Jan 2025 21:15:50 -0800 Subject: [PATCH 2/2] Fix dg2 shadow --- .../layers/sanitizer/sanitizer_common/sanitizer_utils.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/source/loader/layers/sanitizer/sanitizer_common/sanitizer_utils.cpp b/source/loader/layers/sanitizer/sanitizer_common/sanitizer_utils.cpp index 83b58de407..539adee4ef 100644 --- a/source/loader/layers/sanitizer/sanitizer_common/sanitizer_utils.cpp +++ b/source/loader/layers/sanitizer/sanitizer_common/sanitizer_utils.cpp @@ -159,10 +159,10 @@ DeviceType GetDeviceType(ur_context_handle_t Context, // L0 changes their VA layout. // TODO: update our shadow memory layout/algorithms to accordingly. - if (((Ptr >> 52) & 0xff0U) == 0xff0U) { - Type = DeviceType::GPU_PVC; - } else { + if ((Ptr >> 48) == 0xffffU) { Type = DeviceType::GPU_DG2; + } else { + Type = DeviceType::GPU_PVC; } Result = getContext()->urDdiTable.USM.pfnFree(Context, (void *)Ptr); assert(Result == UR_RESULT_SUCCESS &&