From 8289fa25a1a269085b2ac76e044dbe658def9a3d Mon Sep 17 00:00:00 2001 From: Felix Kuehling Date: Fri, 17 Aug 2018 11:46:45 -0400 Subject: [PATCH] libhsakmt: Fix processing of memory fault events AMDKFD_IOC_WAIT_EVENTS with multiple events and wait_for_all = 0 returns success after any of the events have signaled. So we can't blindly assume that a memory fault event that was in the list has actually signaled. Check the gpu_id as an indicator whether there really was a memory fault before processing it further. Change-Id: I6cc311bfc184c631beaf684027176a6ca42e05c1 Signed-off-by: Felix Kuehling [ROCm/ROCR-Runtime commit: 9271e69ddff1b75cb92315f389886c91b3fdc78d] --- projects/rocr-runtime/src/events.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/projects/rocr-runtime/src/events.c b/projects/rocr-runtime/src/events.c index 2e9d126fed..43d99b8da8 100644 --- a/projects/rocr-runtime/src/events.c +++ b/projects/rocr-runtime/src/events.c @@ -313,7 +313,8 @@ HSAKMT_STATUS HSAKMTAPI hsaKmtWaitOnMultipleEvents(HsaEvent *Events[], else { result = HSAKMT_STATUS_SUCCESS; for (HSAuint32 i = 0; i < NumEvents; i++) { - if (Events[i]->EventData.EventType == HSA_EVENTTYPE_MEMORY) { + if (Events[i]->EventData.EventType == HSA_EVENTTYPE_MEMORY && + event_data[i].memory_exception_data.gpu_id) { Events[i]->EventData.EventData.MemoryAccessFault.VirtualAddress = event_data[i].memory_exception_data.va; result = gpuid_to_nodeid(event_data[i].memory_exception_data.gpu_id, &Events[i]->EventData.EventData.MemoryAccessFault.NodeId); if (result != HSAKMT_STATUS_SUCCESS)