From 00c583899634ebebb5a3f1f31e9b930b7259cf6f Mon Sep 17 00:00:00 2001 From: Philip Cox Date: Mon, 7 Oct 2019 13:10:46 -0400 Subject: [PATCH] kfdtest: Check kfd debugger version in tests Need to check the kfd debugger version of the kernel before calling kfd debugger tests in kfdtest. If they are out of sync, the tests may fail. Change-Id: I1df5e89fb1199304e6fbe8973c60b76062514c03 Signed-off-by: Philip Cox [ROCm/ROCR-Runtime commit: efe37698359b3fe13cee3f9922199a8e9c86f27a] --- .../tests/kfdtest/src/KFDDBGTest.cpp | 71 +++++++++++++++++++ 1 file changed, 71 insertions(+) diff --git a/projects/rocr-runtime/tests/kfdtest/src/KFDDBGTest.cpp b/projects/rocr-runtime/tests/kfdtest/src/KFDDBGTest.cpp index ec3a134a80..78b38e4c35 100644 --- a/projects/rocr-runtime/tests/kfdtest/src/KFDDBGTest.cpp +++ b/projects/rocr-runtime/tests/kfdtest/src/KFDDBGTest.cpp @@ -282,6 +282,55 @@ TEST_F(KFDDBGTest, BasicAddressWatch) { } #endif +/** + * checkDebugVersion: + * Inputs: + * HSAuint32 requiredMajor + * -- Required major version number + * HSAuint32 requiredMinor + * -- Required minor version number + * Output: + * bool: + * i) false if major version of thunk and kernel are not the same + * ii) false if kernel minor version is less than the required + * version if the major version is the required version. + * iii) false if thunk minor version is less than the required + * version if the major version is the required version. + * iv) false if hsaKmtGetKernelDebugTrapVersionInfo() call fails. + * v) true otherwise. + * +*/ +static bool checkDebugVersion(HSAuint32 requiredMajor, HSAuint32 requiredMinor) +{ + HSAuint32 kernelMajorNumber = 0; + HSAuint32 kernelMinorNumber = 0; + HSAuint32 thunkMajorNumber = 0; + HSAuint32 thunkMinorNumber = 0; + + hsaKmtGetThunkDebugTrapVersionInfo(&thunkMajorNumber, &thunkMinorNumber); + + if (hsaKmtGetKernelDebugTrapVersionInfo(&kernelMajorNumber, + &kernelMinorNumber)) { + LOG() << "Failed to get kernel debugger version!" << std::endl; + return false; + } + + if (kernelMajorNumber != thunkMajorNumber) + return false; + + if (kernelMajorNumber < requiredMajor || + (kernelMajorNumber == requiredMajor && + kernelMinorNumber < requiredMinor)) + return false; + + if (thunkMajorNumber < requiredMajor || + (thunkMajorNumber == requiredMajor && + thunkMinorNumber < requiredMinor)) + return false; + + return true; +} + TEST_F(KFDDBGTest, BasicDebuggerSuspendResume) { TEST_START(TESTPROFILE_RUNALL) if (m_FamilyId >= FAMILY_AI && m_FamilyId <= FAMILY_AR) { @@ -290,6 +339,12 @@ TEST_F(KFDDBGTest, BasicDebuggerSuspendResume) { ASSERT_GE(defaultGPUNode, 0) << "failed to get default GPU Node"; HSAuint32 Flags = 0; + + if(!checkDebugVersion(0, 2)) { + LOG() << "Test disabled due to debug API version mismatch"; + goto exit; + } + HsaMemoryBuffer isaBuffer(PAGE_SIZE, defaultGPUNode, true/*zero*/, false/*local*/, true/*exec*/); HsaMemoryBuffer iterateBuf(PAGE_SIZE, defaultGPUNode, true, false, false); HsaMemoryBuffer resultBuf(PAGE_SIZE, defaultGPUNode, true, false, false); @@ -367,6 +422,8 @@ TEST_F(KFDDBGTest, BasicDebuggerSuspendResume) { } else { LOG() << "Skipping test: Test not supported on family ID 0x" << m_FamilyId << "." << std::endl; } +exit: + LOG() << std::endl; TEST_END } @@ -378,6 +435,11 @@ TEST_F(KFDDBGTest, BasicDebuggerQueryQueueStatus) { ASSERT_GE(defaultGPUNode, 0) << "failed to get default GPU Node"; + if(!checkDebugVersion(0, 2)) { + LOG() << "Test disabled due to debug API version mismatch"; + goto exit; + } + // enable debug trap and check poll fd creation ASSERT_SUCCESS(hsaKmtEnableDebugTrapWithPollFd(defaultGPUNode, INVALID_QUEUEID, @@ -476,6 +538,8 @@ TEST_F(KFDDBGTest, BasicDebuggerQueryQueueStatus) { LOG() << "Skipping test: Test not supported on family ID 0x" << m_FamilyId << "." << std::endl; } +exit: + LOG() << std::endl; TEST_END } @@ -525,6 +589,11 @@ TEST_F(KFDDBGTest, BasicDebuggerQueryVMFaultQueueStatus) { ASSERT_GE(defaultGPUNode, 0) << "failed to get default GPU Node"; + if(!checkDebugVersion(0, 2)) { + LOG() << "Test disabled due to debug API version mismatch"; + goto exit; + } + pid_t childPid = fork(); ASSERT_GE(childPid, 0); @@ -706,5 +775,7 @@ TEST_F(KFDDBGTest, BasicDebuggerQueryVMFaultQueueStatus) { LOG() << "Skipping test: Test not supported on family ID 0x" << m_FamilyId << "." << std::endl; } +exit: + LOG() << std::endl; TEST_END }