From 01737d2472eac23aa7e8cdc5bb343c548b3a16ab Mon Sep 17 00:00:00 2001 From: kjayapra-amd Date: Fri, 5 Jun 2020 17:40:47 -0400 Subject: [PATCH] SWDEV-239327 - Dont call hsa_amd_memory_pool_free from ~amd::Memory() for obj created by passing devptr. Change-Id: I315fd502df6bb1bf66dd24eac9325f1439e432ad [ROCm/clr commit: 1b0882e061c9d191388b4403f274b811f28befe0] --- projects/clr/rocclr/device/rocm/rocmemory.cpp | 11 +++++++---- projects/clr/rocclr/device/rocm/rocmemory.hpp | 3 ++- 2 files changed, 9 insertions(+), 5 deletions(-) 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);