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>
Этот коммит содержится в:
коммит произвёл
Maneesh Gupta
родитель
5d322c027a
Коммит
cc29df873a
@@ -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());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Ссылка в новой задаче
Block a user