diff --git a/drivers/gpu/hsa/radeon/kfd_events.c b/drivers/gpu/hsa/radeon/kfd_events.c
index 3ae6eb431e207..77980ebde16eb 100644
--- a/drivers/gpu/hsa/radeon/kfd_events.c
+++ b/drivers/gpu/hsa/radeon/kfd_events.c
@@ -446,7 +446,8 @@ static void set_event(struct kfd_event *ev)
 	struct kfd_event_waiter *waiter;
 	struct kfd_event_waiter *next;
 
-	ev->signaled = true;
+	/* Auto reset if the list is non-empty and we're waking someone. */
+	ev->signaled = !ev->auto_reset || list_empty(&ev->waiters);
 
 	list_for_each_entry_safe(waiter, next, &ev->waiters, waiters) {
 		waiter->activated = true;
@@ -456,9 +457,6 @@ static void set_event(struct kfd_event *ev)
 
 		wake_up_process(waiter->sleeping_task);
 	}
-
-	if (ev->auto_reset)
-		ev->signaled = false;
 }
 
 /* Assumes that p is current. */
@@ -586,6 +584,7 @@ static int init_event_waiter(struct kfd_process *p, struct kfd_event_waiter *wai
 		return -EINVAL;
 
 	waiter->activated = ev->signaled;
+	ev->signaled = ev->signaled && !ev->auto_reset;
 
 	list_add(&waiter->waiters, &ev->waiters);