Commit 4057e6ce authored by James Zhu's avatar James Zhu Committed by Alex Deucher

drm/amdkfd: add event_age tracking when receiving interrupt

Add event_age tracking when receiving interrupt.
Signed-off-by: default avatarJames Zhu <James.Zhu@amd.com>
Reviewed-by: default avatarFelix Kuehling <Felix.Kuehling@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 6f582513
...@@ -431,6 +431,7 @@ int kfd_event_create(struct file *devkfd, struct kfd_process *p, ...@@ -431,6 +431,7 @@ int kfd_event_create(struct file *devkfd, struct kfd_process *p,
if (!ret) { if (!ret) {
*event_id = ev->event_id; *event_id = ev->event_id;
*event_trigger_data = ev->event_id; *event_trigger_data = ev->event_id;
ev->event_age = 1;
} else { } else {
kfree(ev); kfree(ev);
} }
...@@ -629,6 +630,11 @@ static void set_event(struct kfd_event *ev) ...@@ -629,6 +630,11 @@ static void set_event(struct kfd_event *ev)
* updating the wait queues in kfd_wait_on_events. * updating the wait queues in kfd_wait_on_events.
*/ */
ev->signaled = !ev->auto_reset || !waitqueue_active(&ev->wq); ev->signaled = !ev->auto_reset || !waitqueue_active(&ev->wq);
if (!(++ev->event_age)) {
/* Never wrap back to reserved/default event age 0/1 */
ev->event_age = 2;
WARN_ONCE(1, "event_age wrap back!");
}
list_for_each_entry(waiter, &ev->wq.head, wait.entry) list_for_each_entry(waiter, &ev->wq.head, wait.entry)
WRITE_ONCE(waiter->activated, true); WRITE_ONCE(waiter->activated, true);
......
...@@ -53,6 +53,7 @@ struct signal_page; ...@@ -53,6 +53,7 @@ struct signal_page;
struct kfd_event { struct kfd_event {
u32 event_id; u32 event_id;
u64 event_age;
bool signaled; bool signaled;
bool auto_reset; bool auto_reset;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment