SWDEV-322620 - Virtual Memory Management

Introducing a VirtualMemObj map as it is needed to differentiate
between virtual address ranges and actual physical memory
This is because a whole VA range can have several physical memories
as chunks.

Change-Id: Ie2a972b4faf3f7d552cfa53e77898f80ad75740a
This commit is contained in:
Christophe Paquot
2022-06-06 11:05:33 -07:00
parent 58aaa8472e
commit 905088e4e7
4 changed files with 60 additions and 4 deletions
+3 -3
View File
@@ -2261,7 +2261,7 @@ void* Device::virtualAlloc(void* addr, size_t size, size_t alignment)
}
// if the device supports SVM FGS, return the committed CPU address directly.
pal::Memory* gpuMem = getGpuMemory(mem);
amd::MemObjMap::AddMemObj(mem->getSvmPtr(), mem);
amd::MemObjMap::AddVirtualMemObj(mem->getSvmPtr(), mem);
void* svmPtr = mem->getSvmPtr();
@@ -2270,10 +2270,10 @@ void* Device::virtualAlloc(void* addr, size_t size, size_t alignment)
void Device::virtualFree(void* addr)
{
amd::Memory* va = amd::MemObjMap::FindMemObj(addr);
amd::Memory* va = amd::MemObjMap::FindVirtualMemObj(addr);
if (nullptr != va && (va->getMemFlags() & CL_MEM_VA_RANGE_AMD)) {
va->release();
amd::MemObjMap::RemoveMemObj(addr);
amd::MemObjMap::RemoveVirtualMemObj(addr);
}
}