From cc29df873a504487d13cf7cf3b88623cf923e8d1 Mon Sep 17 00:00:00 2001 From: Lang Yu Date: Wed, 3 Jan 2024 08:51:02 +0800 Subject: [PATCH] SWDEV-439419 - Unlock host ptr when device ptr equals host ptr hsa_amd_memory_lock_to_pool() and hsa_amd_memory_unlock() should be called balanced. Change-Id: I8b1549861bff752aabbb6399d717d1e346079a38 Signed-off-by: Lang Yu --- rocclr/device/rocm/rocmemory.cpp | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/rocclr/device/rocm/rocmemory.cpp b/rocclr/device/rocm/rocmemory.cpp index 2ef82fec0c..9887d23334 100644 --- a/rocclr/device/rocm/rocmemory.cpp +++ b/rocclr/device/rocm/rocmemory.cpp @@ -682,15 +682,12 @@ void Buffer::destroy() { } if (deviceMemory_ != nullptr) { + bool needUnlockHostMem = false; if (deviceMemory_ != owner()->getHostMem()) { // if they are identical, the host pointer will be // deallocated later on => avoid double deallocation if (isHostMemDirectAccess()) { - if (memFlags & (CL_MEM_USE_HOST_PTR | CL_MEM_ALLOC_HOST_PTR)) { - if (dev().agent_profile() != HSA_PROFILE_FULL) { - hsa_amd_memory_unlock(owner()->getHostMem()); - } - } + needUnlockHostMem = true; } else { dev().memFree(deviceMemory_, size()); const_cast(dev()).updateFreeMemory(size(), true); @@ -705,6 +702,15 @@ void Buffer::destroy() { } else if ((memFlags & CL_MEM_ALLOC_HOST_PTR) && (owner()->getContext().devices().size() == 1)) { dev().hostFree(deviceMemory_, size()); + } else if (isHostMemDirectAccess()) { + needUnlockHostMem = true; + } + } + + if (needUnlockHostMem) { + if (memFlags & (CL_MEM_USE_HOST_PTR | CL_MEM_ALLOC_HOST_PTR)) { + if (dev().agent_profile() != HSA_PROFILE_FULL) + hsa_amd_memory_unlock(owner()->getHostMem()); } } }