add new queue bit test on clear event

enable thunk query api to report if queue is newly created
test new queue bit test on clear events.
also fixup cleanup to disable debug trap.

Change-Id: I3ebe2d85da66f28b8c82f0e68461ee7d32ec0b0d
Signed-off-by: Jonathan Kim <Jonathan.Kim@amd.com>
Reviewed-by: Philip Cox <Philip.Cox@amd.com>
Reviewed-by: Felix Kuehling <Felix.Kuehling@amd.com>


[ROCm/ROCR-Runtime commit: 1ff5cb33b2]
이 커밋은 다음에 포함됨:
Jonathan Kim
2019-08-13 10:47:51 -04:00
커밋한 사람 Jonathan Kim
부모 94420e0624
커밋 c9cc529a4f
4개의 변경된 파일49개의 추가작업 그리고 24개의 파일을 삭제
+41 -20
파일 보기
@@ -434,12 +434,14 @@ TEST_F(KFDDBGTest, BasicDebuggerQueryQueueStatus) {
HSA_QUEUEID queueIds[1] = { qResources->QueueId};
HSA_DEBUG_EVENT_TYPE EventReceived;
bool IsSuspended = false;
bool IsNew = false;
ASSERT_SUCCESS(hsaKmtQueryDebugEvent(defaultGPUNode, INVALID_PID, &qid,
false, &EventReceived,
&IsSuspended));
&IsSuspended, &IsNew));
ASSERT_NE(qid, invalidQid);
ASSERT_EQ(IsSuspended, false);
ASSERT_EQ(IsNew, true);
ASSERT_EQ(EventReceived, HSA_DEBUG_EVENT_TYPE_TRAP);
// suspend queue, query suspended queue and clear pending event
@@ -451,16 +453,17 @@ TEST_F(KFDDBGTest, BasicDebuggerQueryQueueStatus) {
ASSERT_SUCCESS(hsaKmtQueryDebugEvent(defaultGPUNode, INVALID_PID,
&qid, true, &EventReceived,
&IsSuspended));
&IsSuspended, &IsNew));
ASSERT_EQ(IsSuspended, true);
ASSERT_SUCCESS(hsaKmtQueueResume(INVALID_PID, 1, queueIds, 0));
ASSERT_SUCCESS(hsaKmtQueryDebugEvent(defaultGPUNode, INVALID_PID, &qid,
false, &EventReceived,
&IsSuspended));
&IsSuspended, &IsNew));
ASSERT_EQ(IsSuspended, false);
ASSERT_EQ(IsNew, false);
ASSERT_EQ(EventReceived, HSA_DEBUG_EVENT_TYPE_NONE);
dispatch->Sync();
@@ -482,7 +485,8 @@ static void ExitVMFaultQueryChild(std::string errMsg,
HSAint32 pollFd,
PM4Queue *queue1,
PM4Queue *queue2,
HsaEvent *event) {
HsaEvent *event,
int gpuNode) {
if (queue1)
queue1->Destroy();
@@ -500,6 +504,14 @@ static void ExitVMFaultQueryChild(std::string errMsg,
if (pollFd >= 0)
close(pollFd);
if (gpuNode >= 0) {
int ret = hsaKmtDisableDebugTrap(gpuNode);
if (ret) {
exitStatus = 1;
errMsg = "debug trap failed to disable";
}
}
if (!errMsg.empty())
WARN() << errMsg << std::endl;
@@ -525,7 +537,7 @@ TEST_F(KFDDBGTest, BasicDebuggerQueryVMFaultQueueStatus) {
ret = hsaKmtOpenKFD();
if (ret != HSAKMT_STATUS_SUCCESS)
ExitVMFaultQueryChild("KFD open failed",
1, -1, NULL, NULL, NULL);
1, -1, NULL, NULL, NULL, -1);
// enable debug trap and check poll fd creation
ret = hsaKmtEnableDebugTrapWithPollFd(defaultGPUNode,
@@ -534,7 +546,7 @@ TEST_F(KFDDBGTest, BasicDebuggerQueryVMFaultQueueStatus) {
if (ret != HSAKMT_STATUS_SUCCESS || PollFd <= 0)
ExitVMFaultQueryChild("enable debug trap with poll fd failed",
1, -1, NULL, NULL, NULL);
1, -1, NULL, NULL, NULL, defaultGPUNode);
// create shader, vmfault and trap bufs then enable 2nd level trap
HsaMemoryBuffer vmFaultBuf(PAGE_SIZE, defaultGPUNode, true, false,
@@ -560,7 +572,8 @@ TEST_F(KFDDBGTest, BasicDebuggerQueryVMFaultQueueStatus) {
if (ret != HSAKMT_STATUS_SUCCESS)
ExitVMFaultQueryChild("setting trap handler failed",
1, PollFd, NULL, NULL, NULL);
1, PollFd, NULL, NULL, NULL,
defaultGPUNode);
// compile and dispatch shader
m_pIsaGen->CompileShader(jump_to_trap_gfx9, "jump_to_trap",
@@ -571,11 +584,13 @@ TEST_F(KFDDBGTest, BasicDebuggerQueryVMFaultQueueStatus) {
HSAuint32 qid1;
if (queue1.Create(defaultGPUNode) != HSAKMT_STATUS_SUCCESS)
ExitVMFaultQueryChild("queue 1 creation failed",
1, PollFd, NULL, NULL, NULL);
1, PollFd, NULL, NULL, NULL,
defaultGPUNode);
if (queue2.Create(defaultGPUNode) != HSAKMT_STATUS_SUCCESS)
ExitVMFaultQueryChild("queue 2 creation failed",
1, PollFd, &queue1, NULL, NULL);
1, PollFd, &queue1, NULL, NULL,
defaultGPUNode);
unsigned int* iter = iterBuf.As<unsigned int*>();
unsigned int* result = resBuf.As<unsigned int*>();
@@ -593,7 +608,8 @@ TEST_F(KFDDBGTest, BasicDebuggerQueryVMFaultQueueStatus) {
fds[0].events = POLLIN | POLLRDNORM;
if (poll(fds, 1, 5000) <= 0)
ExitVMFaultQueryChild("poll wake on pending trap event failed",
1, PollFd, &queue1, &queue2, NULL);
1, PollFd, &queue1, &queue2, NULL,
defaultGPUNode);
int kMaxSize = 4096;
char fifoBuf[kMaxSize];
@@ -601,23 +617,27 @@ TEST_F(KFDDBGTest, BasicDebuggerQueryVMFaultQueueStatus) {
|| strchr(fifoBuf, 't') == NULL;
if (childStatus)
ExitVMFaultQueryChild("read on pending trap event failed",
1, PollFd, &queue1, &queue2, NULL);
1, PollFd, &queue1, &queue2, NULL,
defaultGPUNode);
memset(fifoBuf, 0, sizeof(fifoBuf));
HSA_DEBUG_EVENT_TYPE EventReceived;
bool IsSuspended;
bool IsNew;
HSAuint32 invalidQid = 0xffffffff;
qid1 = invalidQid;
ret = hsaKmtQueryDebugEvent(defaultGPUNode, INVALID_PID, &qid1,
false, &EventReceived, &IsSuspended);
false, &EventReceived, &IsSuspended,
&IsNew);
childStatus = ret != HSAKMT_STATUS_SUCCESS
|| EventReceived != HSA_DEBUG_EVENT_TYPE_TRAP;
if (childStatus)
ExitVMFaultQueryChild("query on pending trap event failed",
1, PollFd, &queue1, &queue2, NULL);
1, PollFd, &queue1, &queue2, NULL,
defaultGPUNode);
// create and wait on pending vmfault event
HsaEvent *vmFaultEvent;
@@ -630,7 +650,8 @@ TEST_F(KFDDBGTest, BasicDebuggerQueryVMFaultQueueStatus) {
&vmFaultEvent);
if (ret != HSAKMT_STATUS_SUCCESS)
ExitVMFaultQueryChild("create vmfault event failed",
1, PollFd, &queue1, &queue2, NULL);
1, PollFd, &queue1, &queue2, NULL,
defaultGPUNode);
Dispatch dispatch2(vmFaultBuf, false);
dispatch2.SetArgs(
@@ -643,13 +664,13 @@ TEST_F(KFDDBGTest, BasicDebuggerQueryVMFaultQueueStatus) {
if (ret != HSAKMT_STATUS_SUCCESS)
ExitVMFaultQueryChild("wait on vmfault event failed",
1, PollFd, &queue1, &queue2,
vmFaultEvent);
vmFaultEvent, defaultGPUNode);
// poll, read and query on pending vmfault event
if (poll(fds, 1, 5000) <= 0)
ExitVMFaultQueryChild("poll wake on vmfault event failed",
1, PollFd, &queue1, &queue2,
vmFaultEvent);
vmFaultEvent, defaultGPUNode);
childStatus = read(PollFd, fifoBuf, kMaxSize) == -1
|| strchr(fifoBuf, 'v') == NULL
@@ -658,11 +679,11 @@ TEST_F(KFDDBGTest, BasicDebuggerQueryVMFaultQueueStatus) {
if (childStatus)
ExitVMFaultQueryChild("read on vmfault event failed",
1, PollFd, &queue1, &queue2,
vmFaultEvent);
vmFaultEvent, defaultGPUNode);
ret = hsaKmtQueryDebugEvent(defaultGPUNode, INVALID_PID,
&qid1, true, &EventReceived,
&IsSuspended);
&IsSuspended, &IsNew);
childStatus = ret != HSAKMT_STATUS_SUCCESS
|| EventReceived !=
@@ -670,10 +691,10 @@ TEST_F(KFDDBGTest, BasicDebuggerQueryVMFaultQueueStatus) {
if (childStatus)
ExitVMFaultQueryChild("query on vmfault event failed",
1, PollFd, &queue1, &queue2,
vmFaultEvent);
vmFaultEvent, defaultGPUNode);
ExitVMFaultQueryChild("", 0, PollFd, &queue1, &queue2,
vmFaultEvent);
vmFaultEvent, defaultGPUNode);
} else {
int childStatus;