Don't sleep when event age unmatch, and update last_event_age. It is only for KFD_EVENT_TYPE_SIGNAL which is checked by user space. Signed-off-by: James Zhu <James.Zhu@xxxxxxx> --- drivers/gpu/drm/amd/amdkfd/kfd_events.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_events.c b/drivers/gpu/drm/amd/amdkfd/kfd_events.c index b27a79c5f826..23e154811471 100644 --- a/drivers/gpu/drm/amd/amdkfd/kfd_events.c +++ b/drivers/gpu/drm/amd/amdkfd/kfd_events.c @@ -964,6 +964,19 @@ int kfd_wait_on_events(struct kfd_process *p, event_data.event_id); if (ret) goto out_unlock; + + /* last_event_age = 0 reserved for backward compatible */ + if (event_data.last_event_age && + event_waiters[i].event->event_age != event_data.last_event_age) { + event_data.last_event_age = event_waiters[i].event->event_age; + WRITE_ONCE(event_waiters[i].activated, true); + + if (copy_to_user(&events[i], &event_data, + sizeof(struct kfd_event_data))) { + ret = -EFAULT; + goto out_unlock; + } + } } /* Check condition once. */ -- 2.34.1