[fix] add migrated pointers to proper container.

when gpu to cpu migration occurs, we need to populate proper container.

Signed-off-by: Michal Mrozek <michal.mrozek@intel.com>
This commit is contained in:
Michal Mrozek 2023-03-14 20:21:53 +00:00 committed by Compute-Runtime-Automation
parent f2275caf3a
commit 9d0f1879ca
2 changed files with 9 additions and 0 deletions

View File

@ -63,6 +63,7 @@ void transferAndUnprotectMemoryWithHints(NEO::PageFaultManager *pageFaultHandler
pageFaultHandler->transferToCpu(allocPtr, pageFaultData.size, pageFaultData.cmdQ);
end = std::chrono::steady_clock::now();
long long elapsedTime = std::chrono::duration_cast<std::chrono::nanoseconds>(end - start).count();
pageFaultData.unifiedMemoryManager->nonGpuDomainAllocs.push_back(allocPtr);
if (NEO::DebugManager.flags.PrintUmdSharedMigration.get()) {
printf("UMD transferred shared allocation 0x%llx (%zu B) from GPU to CPU (%f us)\n", reinterpret_cast<unsigned long long int>(allocPtr), pageFaultData.size, elapsedTime / 1e3);

View File

@ -545,7 +545,11 @@ TEST_F(CommandListMemAdvisePageFault, givenValidPtrAndPageFaultHandlerAndGpuDoma
NEO::PageFaultManager::PageFaultData pageData;
pageData.cmdQ = deviceImp;
pageData.domain = NEO::PageFaultManager::AllocationDomain::Gpu;
pageData.unifiedMemoryManager = device->getDriverHandle()->getSvmAllocsManager();
EXPECT_EQ(0u, device->getDriverHandle()->getSvmAllocsManager()->nonGpuDomainAllocs.size());
mockPageFaultManager->gpuDomainHandler(mockPageFaultManager, ptr, pageData);
EXPECT_EQ(1u, device->getDriverHandle()->getSvmAllocsManager()->nonGpuDomainAllocs.size());
flags = deviceImp->memAdviseSharedAllocations[allocData];
EXPECT_EQ(0, flags.cpuMigrationBlocked);
@ -616,6 +620,7 @@ TEST_F(CommandListMemAdvisePageFault, givenValidPtrAndPageFaultHandlerAndGpuDoma
NEO::PageFaultManager::PageFaultData pageData;
pageData.cmdQ = deviceImp;
pageData.domain = NEO::PageFaultManager::AllocationDomain::Gpu;
pageData.unifiedMemoryManager = device->getDriverHandle()->getSvmAllocsManager();
mockPageFaultManager->gpuDomainHandler(mockPageFaultManager, ptr, pageData);
flags = deviceImp->memAdviseSharedAllocations[allocData];
EXPECT_EQ(0, flags.cpuMigrationBlocked);
@ -669,6 +674,7 @@ TEST_F(CommandListMemAdvisePageFault, givenValidPtrAndPageFaultHandlerAndGpuDoma
NEO::PageFaultManager::PageFaultData pageData;
pageData.cmdQ = deviceImp;
pageData.domain = NEO::PageFaultManager::AllocationDomain::Gpu;
pageData.unifiedMemoryManager = device->getDriverHandle()->getSvmAllocsManager();
mockPageFaultManager->gpuDomainHandler(mockPageFaultManager, ptr, pageData);
flags = deviceImp->memAdviseSharedAllocations[allocData];
EXPECT_EQ(0, flags.cpuMigrationBlocked);
@ -715,6 +721,7 @@ TEST_F(CommandListMemAdvisePageFault, givenValidPtrAndPageFaultHandlerAndGpuDoma
NEO::PageFaultManager::PageFaultData pageData;
pageData.cmdQ = deviceImp;
pageData.domain = NEO::PageFaultManager::AllocationDomain::Cpu;
pageData.unifiedMemoryManager = device->getDriverHandle()->getSvmAllocsManager();
mockPageFaultManager->gpuDomainHandler(mockPageFaultManager, ptr, pageData);
flags = deviceImp->memAdviseSharedAllocations[allocData];
EXPECT_EQ(0, flags.cpuMigrationBlocked);
@ -761,6 +768,7 @@ TEST_F(CommandListMemAdvisePageFault, givenInvalidPtrAndPageFaultHandlerAndGpuDo
NEO::PageFaultManager::PageFaultData pageData;
pageData.cmdQ = deviceImp;
pageData.domain = NEO::PageFaultManager::AllocationDomain::Gpu;
pageData.unifiedMemoryManager = device->getDriverHandle()->getSvmAllocsManager();
void *alloc = reinterpret_cast<void *>(0x1);
mockPageFaultManager->gpuDomainHandler(mockPageFaultManager, alloc, pageData);
flags = deviceImp->memAdviseSharedAllocations[allocData];