SWDEV-353281 - Move VirtualMem map update to memobj

- The implementation in mempool graphs requires refcounting VA object.
That requires release() to update the map only on the actual destruction.
- Add GPU event tracking for paging operation. Otherwise, runtime
may not always flush IB.

Change-Id: Idf99ffb894321a38e04b490116a7ca435635918d
Esse commit está contido em:
German authored and German Andryeyev committed 2023-04-28 17:22:11 -04:00
1 pai 22eae6ac9e
commit 7ef2da5aba
3 files changed
+30 -21

No files matched your search

+9 -16
Ver Arquivo
@@ -2300,12 +2300,10 @@ void Device::svmFree(void* ptr) const {
}
}
void* Device::virtualAlloc(void* addr, size_t size, size_t alignment)
{
amd::Memory* mem = nullptr;
// ================================================================================================
void* Device::virtualAlloc(void* addr, size_t size, size_t alignment) {
// create a hidden buffer, which will allocated on the device later
mem = new (context()) amd::Buffer(context(), CL_MEM_VA_RANGE_AMD, size, addr);
auto mem = new (context()) amd::Buffer(context(), CL_MEM_VA_RANGE_AMD, size, addr);
if (mem == nullptr) {
LogError("failed to new a va range mem object!");
return nullptr;
@@ -2316,24 +2314,19 @@ void* Device::virtualAlloc(void* addr, size_t size, size_t alignment)
mem->release();
return nullptr;
}
// if the device supports SVM FGS, return the committed CPU address directly.
pal::Memory* gpuMem = getGpuMemory(mem);
amd::MemObjMap::AddVirtualMemObj(mem->getSvmPtr(), mem);
void* svmPtr = mem->getSvmPtr();
return svmPtr;
return mem->getSvmPtr();
}
void Device::virtualFree(void* addr)
{
amd::Memory* va = amd::MemObjMap::FindVirtualMemObj(addr);
if (nullptr != va && (va->getMemFlags() & CL_MEM_VA_RANGE_AMD)) {
// ================================================================================================
void Device::virtualFree(void* addr) {
auto va = amd::MemObjMap::FindVirtualMemObj(addr);
if (nullptr != va) {
va->release();
amd::MemObjMap::RemoveVirtualMemObj(addr);
}
}
// ================================================================================================
bool Device::AcquireExclusiveGpuAccess() {
// Lock the virtual GPU list
vgpusAccess().lock();