diff --git a/tests/kfdtest/src/KFDEvictTest.cpp b/tests/kfdtest/src/KFDEvictTest.cpp index 6fc6969f6a..0a1bf506c0 100644 --- a/tests/kfdtest/src/KFDEvictTest.cpp +++ b/tests/kfdtest/src/KFDEvictTest.cpp @@ -44,6 +44,7 @@ void KFDEvictTest::AllocBuffers(HSAuint32 defaultGPUNode, HSAuint32 count, HSAui << totalMB << ")MB VRAM in KFD" << std::endl; } + HsaMemMapFlags mapFlags = {0}; HSAKMT_STATUS ret; HSAuint32 retry = 0; @@ -56,7 +57,8 @@ void KFDEvictTest::AllocBuffers(HSAuint32 defaultGPUNode, HSAuint32 count, HSAui ret = hsaKmtAllocMemory(defaultGPUNode, vramBufSize, m_Flags, &m_pBuf); if (ret == HSAKMT_STATUS_SUCCESS) { if (is_dgpu()) { - if (hsaKmtMapMemoryToGPU(m_pBuf, vramBufSize, NULL) == HSAKMT_STATUS_ERROR) { + if (hsaKmtMapMemoryToGPUNodes(m_pBuf, vramBufSize, NULL, + mapFlags, 1, reinterpret_cast(&defaultGPUNode)) == HSAKMT_STATUS_ERROR) { EXPECT_SUCCESS(hsaKmtFreeMemory(m_pBuf, vramBufSize)); break; } diff --git a/tests/kfdtest/src/KFDIPCTest.cpp b/tests/kfdtest/src/KFDIPCTest.cpp index 1150076a6b..eba001ebb2 100644 --- a/tests/kfdtest/src/KFDIPCTest.cpp +++ b/tests/kfdtest/src/KFDIPCTest.cpp @@ -75,13 +75,15 @@ void KFDIPCTest::BasicTestChildProcess(int defaultGPUNode, int *pipefd) { HSAuint64 size = PAGE_SIZE, sharedSize; HsaMemoryBuffer tempSysBuffer(size, defaultGPUNode, false); HSAuint32 *sharedLocalBuffer = NULL; + HsaMemMapFlags mapFlags = {0}; /* Read from Pipe the shared Handle. Import shared Local Memory */ ASSERT_GE(read(pipefd[0], reinterpret_cast(&sharedHandleLM), sizeof(sharedHandleLM)), 0); ASSERT_SUCCESS(hsaKmtRegisterSharedHandle(&sharedHandleLM, reinterpret_cast(&sharedLocalBuffer), &sharedSize)); - ASSERT_SUCCESS(hsaKmtMapMemoryToGPU(sharedLocalBuffer, sharedSize, NULL)); + ASSERT_SUCCESS(hsaKmtMapMemoryToGPUNodes(sharedLocalBuffer, sharedSize, NULL, + mapFlags, 1, reinterpret_cast(&defaultGPUNode))); /* Check for pattern in the shared Local Memory */ ASSERT_SUCCESS(sdmaQueue.Create(defaultGPUNode)); @@ -114,9 +116,11 @@ void KFDIPCTest::BasicTestParentProcess(int defaultGPUNode, pid_t cpid, int *pip HsaMemoryBuffer tempSysBuffer(PAGE_SIZE, defaultGPUNode, false); SDMAQueue sdmaQueue; HsaSharedMemoryHandle sharedHandleLM; + HsaMemMapFlags mapFlags = {0}; /* Fill a Local Buffer with a pattern */ - ASSERT_SUCCESS(hsaKmtMapMemoryToGPU(toShareLocalBuffer.As(), toShareLocalBuffer.Size(), &AlternateVAGPU)); + ASSERT_SUCCESS(hsaKmtMapMemoryToGPUNodes(toShareLocalBuffer.As(), toShareLocalBuffer.Size(), &AlternateVAGPU, + mapFlags, 1, reinterpret_cast(&defaultGPUNode))); tempSysBuffer.Fill(0xAAAAAAAA); /* Copy pattern in Local Memory before sharing it */ diff --git a/tests/kfdtest/src/KFDLocalMemoryTest.cpp b/tests/kfdtest/src/KFDLocalMemoryTest.cpp index c879080b25..0af52e9d8e 100644 --- a/tests/kfdtest/src/KFDLocalMemoryTest.cpp +++ b/tests/kfdtest/src/KFDLocalMemoryTest.cpp @@ -57,6 +57,7 @@ TEST_F(KFDLocalMemoryTest, BasicTest) { PM4Queue queue; HSAuint64 AlternateVAGPU; unsigned int BufferSize = PAGE_SIZE; + HsaMemMapFlags mapFlags = {0}; int defaultGPUNode = m_NodeInfo.HsaDefaultGPUNode(); ASSERT_GE(defaultGPUNode, 0) << "failed to get default GPU Node"; @@ -76,8 +77,10 @@ TEST_F(KFDLocalMemoryTest, BasicTest) { m_pIsaGen->GetCopyDwordIsa(isaBuffer); - ASSERT_SUCCESS(hsaKmtMapMemoryToGPU(srcLocalBuffer.As(), srcLocalBuffer.Size(), &AlternateVAGPU)); - ASSERT_SUCCESS(hsaKmtMapMemoryToGPU(dstLocalBuffer.As(), dstLocalBuffer.Size(), &AlternateVAGPU)); + ASSERT_SUCCESS(hsaKmtMapMemoryToGPUNodes(srcLocalBuffer.As(), srcLocalBuffer.Size(), &AlternateVAGPU, + mapFlags, 1, reinterpret_cast(&defaultGPUNode))); + ASSERT_SUCCESS(hsaKmtMapMemoryToGPUNodes(dstLocalBuffer.As(), dstLocalBuffer.Size(), &AlternateVAGPU, + mapFlags, 1, reinterpret_cast(&defaultGPUNode))); ASSERT_SUCCESS(queue.Create(defaultGPUNode)); queue.SetSkipWaitConsump(0); @@ -112,6 +115,7 @@ TEST_F(KFDLocalMemoryTest, VerifyContentsAfterUnmapAndMap) { PM4Queue queue; HSAuint64 AlternateVAGPU; unsigned int BufferSize = PAGE_SIZE; + HsaMemMapFlags mapFlags = {0}; int defaultGPUNode = m_NodeInfo.HsaDefaultGPUNode(); ASSERT_GE(defaultGPUNode, 0) << "failed to get default GPU Node"; @@ -134,7 +138,8 @@ TEST_F(KFDLocalMemoryTest, VerifyContentsAfterUnmapAndMap) { queue.SetSkipWaitConsump(0); if (!is_dgpu()) - ASSERT_SUCCESS(hsaKmtMapMemoryToGPU(LocalBuffer.As(), LocalBuffer.Size(), &AlternateVAGPU)); + ASSERT_SUCCESS(hsaKmtMapMemoryToGPUNodes(LocalBuffer.As(), LocalBuffer.Size(), &AlternateVAGPU, + mapFlags, 1, reinterpret_cast(&defaultGPUNode))); Dispatch dispatch(isaBuffer); @@ -143,7 +148,8 @@ TEST_F(KFDLocalMemoryTest, VerifyContentsAfterUnmapAndMap) { dispatch.Sync(g_TestTimeOut); EXPECT_SUCCESS(hsaKmtUnmapMemoryToGPU(LocalBuffer.As())); - EXPECT_SUCCESS(hsaKmtMapMemoryToGPU(LocalBuffer.As(), LocalBuffer.Size(), &AlternateVAGPU)); + EXPECT_SUCCESS(hsaKmtMapMemoryToGPUNodes(LocalBuffer.As(), LocalBuffer.Size(), &AlternateVAGPU, + mapFlags, 1, reinterpret_cast(&defaultGPUNode))); dispatch.SetArgs(LocalBuffer.As(), SysBufferB.As()); dispatch.Submit(queue); @@ -270,6 +276,7 @@ TEST_F(KFDLocalMemoryTest, Fragmentation) { /* Allocate and test memory using the strategy explained at the top */ HSAKMT_STATUS status; HsaMemFlags memFlags = {0}; + HsaMemMapFlags mapFlags = {0}; memFlags.ui32.PageSize = HSA_PAGE_SIZE_4KB; memFlags.ui32.HostAccess = 0; memFlags.ui32.NonPaged = 1; @@ -318,8 +325,8 @@ TEST_F(KFDLocalMemoryTest, Fragmentation) { + size - sizeof(unsigned)); sysBuffer.As()[0] = ++value; - status = hsaKmtMapMemoryToGPU(pages[order].pointers[p], - size, NULL); + status = hsaKmtMapMemoryToGPUNodes(pages[order].pointers[p], size, NULL, + mapFlags, 1, reinterpret_cast(&defaultGPUNode)); if (status != HSAKMT_STATUS_SUCCESS) { ASSERT_SUCCESS(hsaKmtFreeMemory(pages[order].pointers[p], size)); diff --git a/tests/kfdtest/src/KFDMemoryTest.cpp b/tests/kfdtest/src/KFDMemoryTest.cpp index 8cc641c375..51bed05860 100644 --- a/tests/kfdtest/src/KFDMemoryTest.cpp +++ b/tests/kfdtest/src/KFDMemoryTest.cpp @@ -896,6 +896,16 @@ TEST_F(KFDMemoryTest, MMBench) { HSAuint64 vramSizeMB = GetVramSize(defaultGPUNode) >> 20; + const std::vector gpuNodes = m_NodeInfo.GetNodesWithGPU(); + bool is_all_large_bar = true; + + for (unsigned i = 0; i < gpuNodes.size(); i++) { + if (!m_NodeInfo.IsGPUNodeLargeBar(gpuNodes.at(i))) { + is_all_large_bar = false; + break; + } + } + LOG() << "Found VRAM of " << std::dec << vramSizeMB << "MB." << std::endl; if (vramSizeMB == 0) @@ -986,22 +996,24 @@ TEST_F(KFDMemoryTest, MMBench) { IDLE_SDMA(); /* Map to all GPUs */ - start = GetSystemTickCountInMicroSec(); - for (i = 0; i < nBufs; i++) { - ASSERT_SUCCESS(hsaKmtMapMemoryToGPU(bufs[i], bufSize, &altVa)); - INTERLEAVE_SDMA(); - } - mapAllTime = GetSystemTickCountInMicroSec() - start; - IDLE_SDMA(); + if (is_all_large_bar) { + start = GetSystemTickCountInMicroSec(); + for (i = 0; i < nBufs; i++) { + ASSERT_SUCCESS(hsaKmtMapMemoryToGPU(bufs[i], bufSize, &altVa)); + INTERLEAVE_SDMA(); + } + mapAllTime = GetSystemTickCountInMicroSec() - start; + IDLE_SDMA(); - /* Unmap from all GPUs */ - start = GetSystemTickCountInMicroSec(); - for (i = 0; i < nBufs; i++) { - EXPECT_SUCCESS(hsaKmtUnmapMemoryToGPU(bufs[i])); - INTERLEAVE_SDMA(); + /* Unmap from all GPUs */ + start = GetSystemTickCountInMicroSec(); + for (i = 0; i < nBufs; i++) { + EXPECT_SUCCESS(hsaKmtUnmapMemoryToGPU(bufs[i])); + INTERLEAVE_SDMA(); + } + unmapAllTime = GetSystemTickCountInMicroSec() - start; + IDLE_SDMA(); } - unmapAllTime = GetSystemTickCountInMicroSec() - start; - IDLE_SDMA(); /* Free */ start = GetSystemTickCountInMicroSec(); @@ -1292,6 +1304,7 @@ TEST_F(KFDMemoryTest, PtraceAccessInvisibleVram) { int defaultGPUNode = m_NodeInfo.HsaDefaultGPUNode(); ASSERT_GE(defaultGPUNode, 0) << "failed to get default GPU Node"; + HsaMemMapFlags mapFlags = {0}; HsaMemFlags memFlags = {0}; memFlags.ui32.PageSize = HSA_PAGE_SIZE_4KB; /* Allocate host not accessible vram */ @@ -1307,7 +1320,8 @@ TEST_F(KFDMemoryTest, PtraceAccessInvisibleVram) { const HSAuint64 VRAM_OFFSET = (4 << 20) - sizeof(HSAuint64); ASSERT_SUCCESS(hsaKmtAllocMemory(defaultGPUNode, size, memFlags, &mem)); - ASSERT_SUCCESS(hsaKmtMapMemoryToGPU(mem, size, NULL)); + ASSERT_SUCCESS(hsaKmtMapMemoryToGPUNodes(mem, size, NULL, + mapFlags, 1, reinterpret_cast(&defaultGPUNode))); /* Set the word before 4M boundary to 0xdeadbeefdeadbeef * and the word after 4M boundary to 0xcafebabecafebabe */ diff --git a/tests/kfdtest/src/KFDTestUtil.cpp b/tests/kfdtest/src/KFDTestUtil.cpp index 2195d6f37e..b316909139 100644 --- a/tests/kfdtest/src/KFDTestUtil.cpp +++ b/tests/kfdtest/src/KFDTestUtil.cpp @@ -148,6 +148,9 @@ HsaMemoryBuffer::HsaMemoryBuffer(HSAuint64 size, unsigned int node, bool zero, b m_Node(node) { m_Flags.Value = 0; + HsaMemMapFlags mapFlags = {0}; + bool map_specific_gpu = (node && !isScratch); + if (isScratch) { m_Flags.ui32.Scratch = 1; m_Flags.ui32.HostAccess = 1; @@ -170,7 +173,10 @@ HsaMemoryBuffer::HsaMemoryBuffer(HSAuint64 size, unsigned int node, bool zero, b EXPECT_SUCCESS(hsaKmtAllocMemory(m_Node, m_Size, m_Flags, &m_pBuf)); if (is_dgpu()) { - EXPECT_SUCCESS(hsaKmtMapMemoryToGPU(m_pBuf, m_Size, NULL)); + if (map_specific_gpu) + EXPECT_SUCCESS(hsaKmtMapMemoryToGPUNodes(m_pBuf, m_Size, NULL, mapFlags, 1, &m_Node)); + else + EXPECT_SUCCESS(hsaKmtMapMemoryToGPU(m_pBuf, m_Size, NULL)); m_MappedNodes = 1 << m_Node; }