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 <Lang.Yu@amd.com>
Этот коммит содержится в:
Lang Yu
2024-01-03 08:51:02 +08:00
коммит произвёл Maneesh Gupta
родитель 5d322c027a
Коммит cc29df873a
+11 -5
Просмотреть файл
@@ -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<Device&>(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());
}
}
}