diff --git a/projects/clr/rocclr/device/rocm/rocmemory.cpp b/projects/clr/rocclr/device/rocm/rocmemory.cpp index 5af1987afc..6b1923e175 100755 --- a/projects/clr/rocclr/device/rocm/rocmemory.cpp +++ b/projects/clr/rocclr/device/rocm/rocmemory.cpp @@ -654,10 +654,12 @@ void Buffer::destroy() { } const bool isFineGrain = memFlags & CL_MEM_SVM_FINE_GRAIN_BUFFER; - if (isFineGrain) { - dev().hostFree(deviceMemory_, size()); - } else { - dev().memFree(deviceMemory_, size()); + if (kind_ != MEMORY_KIND_PTRGIVEN) { + if (isFineGrain) { + dev().hostFree(deviceMemory_, size()); + } else { + dev().memFree(deviceMemory_, size()); + } } if ((deviceMemory_ != nullptr) && @@ -743,6 +745,7 @@ bool Buffer::create() { owner()->setSvmPtr(deviceMemory_); } else { deviceMemory_ = owner()->getSvmPtr(); + kind_ = MEMORY_KIND_PTRGIVEN; } if (!isFineGrain && (owner()->parent() != nullptr) && diff --git a/projects/clr/rocclr/device/rocm/rocmemory.hpp b/projects/clr/rocclr/device/rocm/rocmemory.hpp index 96be5c0f56..a99af6d6bb 100755 --- a/projects/clr/rocclr/device/rocm/rocmemory.hpp +++ b/projects/clr/rocclr/device/rocm/rocmemory.hpp @@ -35,7 +35,8 @@ class Memory : public device::Memory { MEMORY_KIND_NORMAL = 0, MEMORY_KIND_LOCK, MEMORY_KIND_GART, - MEMORY_KIND_INTEROP + MEMORY_KIND_INTEROP, + MEMORY_KIND_PTRGIVEN }; Memory(const roc::Device& dev, amd::Memory& owner);