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 | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_events.c b/drivers/gpu/drm/amd/amdkfd/kfd_events.c index c7689181cc22..f4ceb5be78ed 100644 --- a/drivers/gpu/drm/amd/amdkfd/kfd_events.c +++ b/drivers/gpu/drm/amd/amdkfd/kfd_events.c @@ -952,6 +952,21 @@ 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.signal_event_data.last_event_age && + event_waiters[i].event->event_age != + event_data.signal_event_data.last_event_age) { + event_data.signal_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