libhsakmt: Fix improper usage of hsaKmtRegisterMemoryToNodes

It's unnecessary to register non-userptr.

Change-Id: Iefd329578365e036e2fe7e4d5c9c0c3d0976f67c
Signed-off-by: Lang Yu <Lang.Yu@amd.com>
Signed-off-by: Chris Freehill <cfreehil@amd.com>
Cette révision appartient à :
Lang Yu
2024-04-22 16:02:34 +08:00
révisé par Chris Freehill
Parent 5eb2a2660c
révision a7a712fb36
3 fichiers modifiés avec 8 ajouts et 15 suppressions
+6 -1
Voir le fichier
@@ -363,11 +363,16 @@ void *allocate_exec_aligned_memory_gpu(uint32_t size, uint32_t align, uint32_t g
if (NodeId != 0) {
uint32_t nodes_array[1] = {NodeId};
HsaMemMapFlags map_flags = {0};
HSAKMT_STATUS result;
if (hsaKmtRegisterMemoryToNodes(mem, size, 1, nodes_array) != HSAKMT_STATUS_SUCCESS) {
result = hsaKmtMapMemoryToGPUNodes(mem, size, &gpu_va, map_flags, 1, nodes_array);
if (result != HSAKMT_STATUS_SUCCESS) {
hsaKmtFreeMemory(mem, size);
return NULL;
}
return mem;
}
if (hsaKmtMapMemoryToGPU(mem, size, &gpu_va) != HSAKMT_STATUS_SUCCESS) {
-6
Voir le fichier
@@ -529,32 +529,26 @@ TEST_F(KFDLocalMemoryTest, MapVramToGPUNodesTest) {
HsaMemMapFlags mapFlags = {0};
EXPECT_SUCCESS(hsaKmtAllocMemory(nodes[1], PAGE_SIZE, memFlags, &shared_addr));
EXPECT_SUCCESS(hsaKmtRegisterMemoryToNodes(shared_addr, PAGE_SIZE, 2, nodes));
EXPECT_SUCCESS(hsaKmtMapMemoryToGPUNodes(shared_addr, PAGE_SIZE, NULL, mapFlags, 2, nodes));
EXPECT_SUCCESS(hsaKmtQueryPointerInfo(shared_addr, &info));
EXPECT_EQ(info.NRegisteredNodes, 2);
EXPECT_EQ(info.NMappedNodes, 2);
EXPECT_SUCCESS(hsaKmtMapMemoryToGPUNodes(shared_addr, PAGE_SIZE, NULL, mapFlags, 1, &nodes[0]));
EXPECT_SUCCESS(hsaKmtQueryPointerInfo(shared_addr, &info));
EXPECT_EQ(info.NRegisteredNodes, 2);
EXPECT_EQ(info.NMappedNodes, 1);
EXPECT_EQ(info.MappedNodes[0], nodes[0]);
EXPECT_SUCCESS(hsaKmtMapMemoryToGPUNodes(shared_addr, PAGE_SIZE, NULL, mapFlags, 1, &nodes[1]));
EXPECT_SUCCESS(hsaKmtQueryPointerInfo(shared_addr, &info));
EXPECT_EQ(info.NRegisteredNodes, 2);
EXPECT_EQ(info.NMappedNodes, 1);
EXPECT_EQ(info.MappedNodes[0], nodes[1]);
EXPECT_SUCCESS(hsaKmtUnmapMemoryToGPU(shared_addr));
EXPECT_SUCCESS(hsaKmtQueryPointerInfo(shared_addr, &info));
EXPECT_EQ(info.NRegisteredNodes, 2);
EXPECT_EQ(info.NMappedNodes, 0);
EXPECT_SUCCESS(hsaKmtMapMemoryToGPUNodes(shared_addr, PAGE_SIZE, NULL, mapFlags, 1, &nodes[0]));
EXPECT_SUCCESS(hsaKmtQueryPointerInfo(shared_addr, &info));
EXPECT_EQ(info.NRegisteredNodes, 2);
EXPECT_EQ(info.NMappedNodes, 1);
EXPECT_EQ(info.MappedNodes[0], nodes[0]);
+2 -8
Voir le fichier
@@ -468,14 +468,11 @@ unsigned int HsaMemoryBuffer::Node() const {
}
int HsaMemoryBuffer::MapMemToNodes(unsigned int *nodes, unsigned int nodes_num) {
HsaMemMapFlags mapFlags = {0};
int ret, bit;
ret = hsaKmtRegisterMemoryToNodes(m_pBuf, m_Size, nodes_num, nodes);
if (ret != 0)
return ret;
ret = hsaKmtMapMemoryToGPU(m_pBuf, m_Size, NULL);
ret = hsaKmtMapMemoryToGPUNodes(m_pBuf, m_Size, NULL, mapFlags, nodes_num, nodes);
if (ret != 0) {
hsaKmtDeregisterMemory(m_pBuf);
return ret;
}
@@ -494,7 +491,6 @@ int HsaMemoryBuffer::UnmapMemToNodes(unsigned int *nodes, unsigned int nodes_num
if (ret)
return ret;
hsaKmtDeregisterMemory(m_pBuf);
for (unsigned int i = 0; i < nodes_num; i++) {
bit = 1 << nodes[i];
m_MappedNodes &= ~bit;
@@ -528,7 +524,6 @@ void HsaMemoryBuffer::UnmapAllNodes() {
* TODO: When thunk is updated, use hsaKmtRegisterToNodes. Then nodes will be used
*/
hsaKmtUnmapMemoryToGPU(m_pBuf);
hsaKmtDeregisterMemory(m_pBuf);
m_MappedNodes = 0;
@@ -543,7 +538,6 @@ HsaMemoryBuffer::~HsaMemoryBuffer() {
if (is_dgpu()) {
if (m_MappedNodes) {
hsaKmtUnmapMemoryToGPU(m_pBuf);
hsaKmtDeregisterMemory(m_pBuf);
}
}
hsaKmtFreeMemory(m_pBuf, m_Size);