Skip to content

Commit e7ada4e

Browse files
author
Arandjelovic, Marko
authored
Revert SWDEV-512344 - Unmap all subbuffers (#26)
This reverts commit 0b69120cfcb5b4689d9f2037b1a01e274d85c20f.
1 parent 2259a8c commit e7ada4e

File tree

2 files changed

+20
-22
lines changed

2 files changed

+20
-22
lines changed

hipamd/src/hip_vm.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -366,6 +366,12 @@ hipError_t hipMemUnmap(void* ptr, size_t size) {
366366
cmd->enqueue();
367367
cmd->awaitCompletion();
368368
cmd->release();
369+
vaddr_sub_obj->release();
370+
371+
// restore the original pa of the generic allocation
372+
hip::GenericAllocation* ga
373+
= reinterpret_cast<hip::GenericAllocation*>(phys_mem_obj->getUserData().data);
374+
ga->release();
369375

370376
HIP_RETURN(hipSuccess);
371377
}

rocclr/device/rocm/rocvirtual.cpp

Lines changed: 14 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -2924,29 +2924,21 @@ void VirtualGPU::submitVirtualMap(amd::VirtualMapCommand& vcmd) {
29242924
dispatchBarrierPacket(kBarrierPacketHeader, false);
29252925
Barriers().WaitCurrent();
29262926

2927-
size_t total_unmapped_buffers_size = 0;
2928-
auto sub_buffers = vaddr_base_obj->subBuffers();
2929-
for (auto buffer : sub_buffers) {
2930-
if (total_unmapped_buffers_size + buffer->getSize() <= vcmd.size()) {
2931-
// Unmap the object, since the physical addr is set.
2932-
if ((hsa_status = hsa_amd_vmem_unmap(buffer->getSvmPtr(), buffer->getSize())) ==
2933-
HSA_STATUS_SUCCESS) {
2934-
buffer->getContext().devices()[0]->DestroyVirtualBuffer(buffer);
2935-
amd::MemObjMap::RemoveMemObj(buffer->getSvmPtr());
2936-
if (buffer->getUserData().phys_mem_obj != nullptr) {
2937-
auto& phys_mem_user_data = buffer->getUserData().phys_mem_obj->getUserData();
2938-
phys_mem_user_data.vaddr_mem_obj = nullptr;
2939-
if (phys_mem_user_data.data != nullptr) {
2940-
reinterpret_cast<amd::RuntimeObject*>(phys_mem_user_data.data)->release();
2941-
}
2942-
buffer->getUserData().phys_mem_obj = nullptr;
2943-
total_unmapped_buffers_size += buffer->getSize();
2944-
}
2945-
buffer->release();
2946-
} else {
2947-
LogError("HSA Command: hsa_amd_vmem_unmap failed");
2948-
}
2927+
amd::Memory* vaddr_sub_obj = amd::MemObjMap::FindMemObj(vcmd.ptr());
2928+
assert(vaddr_sub_obj != nullptr);
2929+
2930+
// Unmap the object, since the physical addr is set.
2931+
if ((hsa_status = hsa_amd_vmem_unmap(vaddr_sub_obj->getSvmPtr(), vcmd.size()))
2932+
== HSA_STATUS_SUCCESS) {
2933+
// assert the va is mapped and needs to be removed
2934+
vaddr_sub_obj->getContext().devices()[0]->DestroyVirtualBuffer(vaddr_sub_obj);
2935+
amd::MemObjMap::RemoveMemObj(vcmd.ptr());
2936+
if (vaddr_sub_obj->getUserData().phys_mem_obj != nullptr) {
2937+
vaddr_sub_obj->getUserData().phys_mem_obj->getUserData().vaddr_mem_obj = nullptr;
2938+
vaddr_sub_obj->getUserData().phys_mem_obj = nullptr;
29492939
}
2940+
} else {
2941+
LogError("HSA Command: hsa_amd_vmem_unmap failed");
29502942
}
29512943
}
29522944

0 commit comments

Comments
 (0)