From 2ab36a8f08d6abb52fc641019f5504a7a406b5c0 Mon Sep 17 00:00:00 2001 From: David Yat Sin Date: Fri, 2 Feb 2024 14:55:33 +0000 Subject: [PATCH] rocrtst: Add some tests for hsa_amd_pointer_info Add tests to catch whether ROCr breaks ABI compatibility with the hsa_amd_pointer_info API in case the hsa_amd_pointer_info struct is extended. Change-Id: I4e69bf30db9791e59f895b2798b87985c41242e5 [ROCm/ROCR-Runtime commit: 776da1a3f7643874e08b63835462b79717791d96] --- .../rocrtst/suites/functional/memory_basic.cc | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/projects/rocr-runtime/rocrtst/suites/functional/memory_basic.cc b/projects/rocr-runtime/rocrtst/suites/functional/memory_basic.cc index 049bbd6746..24f2c94da1 100644 --- a/projects/rocr-runtime/rocrtst/suites/functional/memory_basic.cc +++ b/projects/rocr-runtime/rocrtst/suites/functional/memory_basic.cc @@ -347,6 +347,35 @@ void MemoryTest::MemAvailableTest(hsa_agent_t ag, hsa_amd_memory_pool_t pool) { err = hsa_amd_memory_pool_allocate(pool, allocate_sz1, 0, &memPtr1); ASSERT_EQ(err, HSA_STATUS_SUCCESS); + hsa_amd_pointer_info_t info = {}; + info.size = sizeof(info); + + // Check pointer info for valid pointer + ASSERT_SUCCESS(hsa_amd_pointer_info(memPtr1, &info, NULL, 0, NULL)); + + ASSERT_EQ(info.type, HSA_EXT_POINTER_TYPE_HSA); + ASSERT_EQ(info.sizeInBytes, allocate_sz1); + ASSERT_EQ(info.agentOwner.handle, ag.handle); + // ROCR may return a smaller size of info if it is an older version of ROCr and ROCr's + // internal definition hsa_amd_pointer_info_t is smaller than the users. But ROCr cannot + // return a bigger size + ASSERT_LE(info.size, sizeof(info)); + + // Check pointer info for invalid pointer + hsa_amd_pointer_info_t info2 = {}; + info2.size = sizeof(info2); + ASSERT_SUCCESS(hsa_amd_pointer_info((memPtr1 + allocate_sz1 + 1), &info2, NULL, 0, NULL)); + ASSERT_EQ(info2.type, HSA_EXT_POINTER_TYPE_UNKNOWN); + + // Simulate case where ROCr has added extra parameters to hsa_amd_pointer_info. + // i.e ROCr's hsa_amd_pointer_info is bigger than user's hsa_amd_pointer_info + // ROCr should still return info.size same as user's size + hsa_amd_pointer_info_t info3 = {}; + info3.size = sizeof(info3) - 2; + ASSERT_SUCCESS(hsa_amd_pointer_info(memPtr1, &info3, NULL, 0, NULL)); + ASSERT_EQ(info.type, HSA_EXT_POINTER_TYPE_HSA); + ASSERT_EQ(info3.size, sizeof(info3) - 2); + err = hsa_agent_get_info(ag, (hsa_agent_info_t)HSA_AMD_AGENT_INFO_MEMORY_AVAIL, &ag_avail_memory_after); ASSERT_EQ(err, HSA_STATUS_SUCCESS);