SWDEV-555178 - Calculate phys mem offset for remap range (#1879)
This commit is contained in:
@@ -2319,12 +2319,18 @@ void VirtualGPU::submitVirtualMap(amd::VirtualMapCommand& vcmd) {
|
||||
|
||||
// Create a view, since original base obj will map the whole memory and multimap cases wont work.
|
||||
amd::Memory* vaddr_sub_obj = nullptr;
|
||||
Pal::IGpuMemory* phymem_igpu_mem = nullptr;
|
||||
size_t vaddr_offset = 0;
|
||||
size_t phys_offset = 0;
|
||||
if (phys_mem_obj != nullptr) {
|
||||
constexpr bool kParent = false;
|
||||
vaddr_sub_obj = phys_mem_obj->getContext().devices()[0]->CreateVirtualBuffer(
|
||||
phys_mem_obj->getContext(), const_cast<void*>(vcmd.ptr()), vcmd.size(),
|
||||
phys_mem_obj->getUserData().deviceId, phys_mem_obj->getUserData().locationType, kParent);
|
||||
|
||||
pal::Memory* phys_pal_mem = dev().getGpuMemory(phys_mem_obj);
|
||||
phymem_igpu_mem = phys_pal_mem->iMem();
|
||||
phys_offset = phys_pal_mem->offset();
|
||||
} else {
|
||||
vaddr_sub_obj = amd::MemObjMap::FindMemObj(vcmd.ptr());
|
||||
}
|
||||
@@ -2335,11 +2341,8 @@ void VirtualGPU::submitVirtualMap(amd::VirtualMapCommand& vcmd) {
|
||||
|
||||
// The imem() in the backend is shared between base and sub/view object.
|
||||
pal::Memory* vaddr_pal_mem = dev().getGpuMemory(vaddr_base_obj);
|
||||
Pal::IGpuMemory* phymem_igpu_mem =
|
||||
(phys_mem_obj == nullptr) ? nullptr : dev().getGpuMemory(phys_mem_obj)->iMem();
|
||||
|
||||
Pal::VirtualMemoryRemapRange range{vaddr_pal_mem->iMem(), vaddr_offset,
|
||||
phymem_igpu_mem, 0,
|
||||
phymem_igpu_mem, phys_offset,
|
||||
vcmd.size(), Pal::VirtualGpuMemAccessMode::NoAccess};
|
||||
|
||||
// Wait for previous operations before unmap
|
||||
@@ -2364,7 +2367,7 @@ void VirtualGPU::submitVirtualMap(amd::VirtualMapCommand& vcmd) {
|
||||
phys_mem_obj->getUserData().vaddr_mem_obj = vaddr_sub_obj;
|
||||
} else {
|
||||
// assert the vaddr_mem_obj is mapped and needs to be removed
|
||||
amd::Memory* vaddr_sub_obj = amd::MemObjMap::FindMemObj(vcmd.ptr());
|
||||
vaddr_sub_obj = amd::MemObjMap::FindMemObj(vcmd.ptr());
|
||||
assert(vaddr_sub_obj != nullptr);
|
||||
assert(vcmd.ptr() == vaddr_sub_obj->getSvmPtr());
|
||||
|
||||
|
||||
Reference in New Issue
Block a user