Skip to content

Commit 9101082

Browse files
committed
kfdtest: Add test for event wait with event age tracking enable
Add 5 different test scenario to cover new event age tracking features. Change-Id: Icab43240fd127208b18abbd7542d6444127ef0c7 Signed-off-by: James Zhu <James.Zhu@amd.com>
1 parent efdbf6c commit 9101082

File tree

1 file changed

+65
-0
lines changed

1 file changed

+65
-0
lines changed

tests/kfdtest/src/KFDEventTest.cpp

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,71 @@ TEST_F(KFDEventTest, SignalEvent) {
117117
TEST_END;
118118
}
119119

120+
/* test event signaling with event age enabled wait */
121+
TEST_F(KFDEventTest, SignalEventExt) {
122+
TEST_START(TESTPROFILE_RUNALL);
123+
124+
PM4Queue queue;
125+
HsaEvent *tmp_event;
126+
uint64_t event_age;
127+
128+
if (m_VersionInfo.KernelInterfaceMajorVersion == 1 &&
129+
m_VersionInfo.KernelInterfaceMinorVersion < 14) {
130+
LOG() << "event age tracking isn't supported in KFD. Exiting." << std::endl;
131+
return;
132+
}
133+
134+
int defaultGPUNode = m_NodeInfo.HsaDefaultGPUNode();
135+
ASSERT_GE(defaultGPUNode, 0) << "failed to get default GPU Node";
136+
137+
ASSERT_SUCCESS(CreateQueueTypeEvent(false, false, defaultGPUNode, &tmp_event));
138+
139+
/* Intentionally let event id for m_pHsaEvent be non zero */
140+
ASSERT_SUCCESS(CreateQueueTypeEvent(false, false, defaultGPUNode, &m_pHsaEvent));
141+
ASSERT_NE(0, m_pHsaEvent->EventData.HWData2);
142+
143+
ASSERT_SUCCESS(queue.Create(defaultGPUNode));
144+
145+
/* 1. event_age gets incremented every time when the event signals */
146+
event_age = 1;
147+
queue.PlaceAndSubmitPacket(PM4ReleaseMemoryPacket(m_FamilyId, false,
148+
m_pHsaEvent->EventData.HWData2, m_pHsaEvent->EventId));
149+
EXPECT_SUCCESS(hsaKmtWaitOnEvent_Ext(m_pHsaEvent, g_TestTimeOut, &event_age));
150+
ASSERT_EQ(event_age, 2);
151+
queue.PlaceAndSubmitPacket(PM4ReleaseMemoryPacket(m_FamilyId, false,
152+
m_pHsaEvent->EventData.HWData2, m_pHsaEvent->EventId));
153+
EXPECT_SUCCESS(hsaKmtWaitOnEvent_Ext(m_pHsaEvent, g_TestTimeOut, &event_age));
154+
ASSERT_EQ(event_age, 3);
155+
156+
/* 2. event wait return without sleep after the event signals */
157+
queue.PlaceAndSubmitPacket(PM4ReleaseMemoryPacket(m_FamilyId, false,
158+
m_pHsaEvent->EventData.HWData2, m_pHsaEvent->EventId));
159+
sleep(1); /* wait for event signaling */
160+
EXPECT_SUCCESS(hsaKmtWaitOnEvent_Ext(m_pHsaEvent, g_TestTimeOut, &event_age));
161+
ASSERT_EQ(event_age, 4);
162+
163+
/* 3. signaling from CPU */
164+
hsaKmtSetEvent(m_pHsaEvent);
165+
EXPECT_SUCCESS(hsaKmtWaitOnEvent_Ext(m_pHsaEvent, g_TestTimeOut, &event_age));
166+
ASSERT_EQ(event_age, 5);
167+
168+
/* 4. when event_age is 0, hsaKmtWaitOnEvent_Ext always sleeps */
169+
event_age = 0;
170+
ASSERT_EQ(HSAKMT_STATUS_WAIT_TIMEOUT, hsaKmtWaitOnEvent_Ext(m_pHsaEvent, g_TestTimeOut, &event_age));
171+
172+
/* 5. when event_age is 0, it always stays 0 after the event signals */
173+
queue.PlaceAndSubmitPacket(PM4ReleaseMemoryPacket(m_FamilyId, false,
174+
m_pHsaEvent->EventData.HWData2, m_pHsaEvent->EventId));
175+
EXPECT_SUCCESS(hsaKmtWaitOnEvent_Ext(m_pHsaEvent, g_TestTimeOut, &event_age));
176+
ASSERT_EQ(event_age, 0);
177+
178+
EXPECT_SUCCESS(hsaKmtDestroyEvent(tmp_event));
179+
180+
EXPECT_SUCCESS(queue.Destroy());
181+
182+
TEST_END;
183+
}
184+
120185
static uint64_t gettime() {
121186
struct timespec ts;
122187
clock_gettime(CLOCK_MONOTONIC, &ts);

0 commit comments

Comments
 (0)