From 10ffc63d7bdc3e5e94ccfa209d83db66708d6664 Mon Sep 17 00:00:00 2001 From: Yong Zhao Date: Wed, 6 Nov 2019 19:52:03 -0500 Subject: [PATCH] kfdtest: Add AllQueues test This puts all CP and SDMA queues in a single test, which is currently missing. Change-Id: I98bf58df1be65fe9daf6311c016a48569a8ab674 Signed-off-by: Yong Zhao --- tests/kfdtest/scripts/kfdtest.exclude | 1 + tests/kfdtest/src/KFDQMTest.cpp | 61 +++++++++++++++++++++++++++ 2 files changed, 62 insertions(+) diff --git a/tests/kfdtest/scripts/kfdtest.exclude b/tests/kfdtest/scripts/kfdtest.exclude index 590cd3aa2b..42e0df356c 100644 --- a/tests/kfdtest/scripts/kfdtest.exclude +++ b/tests/kfdtest/scripts/kfdtest.exclude @@ -18,6 +18,7 @@ FILTER[core_sws]=\ "KFDQMTest.SubmitNopSdmaQueue:"\ "KFDQMTest.SubmitPacketSdmaQueue:"\ "KFDQMTest.AllSdmaQueues:"\ +"KFDQMTest.AllQueues:"\ "KFDEventTest.SignalEvent" # HWS mode diff --git a/tests/kfdtest/src/KFDQMTest.cpp b/tests/kfdtest/src/KFDQMTest.cpp index ae76fa1a47..0d8a43886f 100644 --- a/tests/kfdtest/src/KFDQMTest.cpp +++ b/tests/kfdtest/src/KFDQMTest.cpp @@ -243,6 +243,67 @@ TEST_F(KFDQMTest, AllSdmaQueues) { TEST_END } +TEST_F(KFDQMTest, AllQueues) { + TEST_START(TESTPROFILE_RUNALL) + + int defaultGPUNode = m_NodeInfo.HsaDefaultGPUNode(); + int bufSize = PAGE_SIZE; + ASSERT_GE(defaultGPUNode, 0) << "failed to get default GPU Node"; + + unsigned int i, j; + + const unsigned int numCpQueues = m_numCpQueues; + const unsigned int numSdmaQueues = m_numSdmaEngines * m_numSdmaQueuesPerEngine; + + HsaMemoryBuffer destBufCp(PAGE_SIZE, defaultGPUNode, false); + destBufCp.Fill(0xFF); + + HsaMemoryBuffer destBuf(bufSize << 1 , defaultGPUNode, false); + HsaMemoryBuffer srcBuf(bufSize, defaultGPUNode, false); + destBuf.Fill(0xFF); + + std::vector cpQueues(numCpQueues); + std::vector sdmaQueues(numSdmaQueues); + + for (i = 0; i < numCpQueues; ++i) + ASSERT_SUCCESS(cpQueues[i].Create(defaultGPUNode)) << " QueueId=" << i; + + for (j = 0; j < numSdmaQueues; ++j) + ASSERT_SUCCESS(sdmaQueues[j].Create(defaultGPUNode)); + + for (i = 0; i < numCpQueues; ++i) { + cpQueues[i].PlaceAndSubmitPacket(PM4WriteDataPacket(destBufCp.As()+i*2, i, i)); + + cpQueues[i].Wait4PacketConsumption(); + + EXPECT_TRUE(WaitOnValue(destBufCp.As()+i*2, i)); + } + + for (j = 0; j < numSdmaQueues; ++j) { + destBuf.Fill(0x0); + srcBuf.Fill(j + 0xa0); + sdmaQueues[j].PlaceAndSubmitPacket( + SDMACopyDataPacket(sdmaQueues[j].GetFamilyId(), destBuf.As(), srcBuf.As(), bufSize)); + sdmaQueues[j].PlaceAndSubmitPacket( + SDMAWriteDataPacket(sdmaQueues[j].GetFamilyId(), destBuf.As() + bufSize/4, 0x02020202)); + + sdmaQueues[j].Wait4PacketConsumption(); + + EXPECT_TRUE(WaitOnValue(destBuf.As() + bufSize/4, 0x02020202)); + + EXPECT_SUCCESS(memcmp( + destBuf.As(), srcBuf.As(), bufSize)); + } + + for (i = 0; i < numCpQueues; ++i) + EXPECT_SUCCESS(cpQueues[i].Destroy()); + + for (j = 0; j < numSdmaQueues; ++j) + EXPECT_SUCCESS(sdmaQueues[j].Destroy()); + + TEST_END +} + /* The following test is designed to reproduce an intermittent hang on * Fiji and other VI/Polaris GPUs. This test typically hangs in a few * seconds. According to analysis done by HW engineers, the culprit