Skip to content

Commit 96cdb53

Browse files
jameszhu-amdalexdeucher
authored andcommitted
drm/amdkfd: set activated flag true when event age unmatchs
Set waiter's activated flag true when event age unmatchs with last_event_age. Signed-off-by: James Zhu <James.Zhu@amd.com> Reviewed-by: Felix Kuehling <Felix.Kuehling@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
1 parent 4057e6c commit 96cdb53

1 file changed

Lines changed: 13 additions & 4 deletions

File tree

drivers/gpu/drm/amd/amdkfd/kfd_events.c

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ struct kfd_event_waiter {
4141
wait_queue_entry_t wait;
4242
struct kfd_event *event; /* Event to wait for */
4343
bool activated; /* Becomes true when event is signaled */
44+
bool event_age_enabled; /* set to true when last_event_age is non-zero */
4445
};
4546

4647
/*
@@ -797,9 +798,9 @@ static struct kfd_event_waiter *alloc_event_waiters(uint32_t num_events)
797798

798799
static int init_event_waiter(struct kfd_process *p,
799800
struct kfd_event_waiter *waiter,
800-
uint32_t event_id)
801+
struct kfd_event_data *event_data)
801802
{
802-
struct kfd_event *ev = lookup_event_by_id(p, event_id);
803+
struct kfd_event *ev = lookup_event_by_id(p, event_data->event_id);
803804

804805
if (!ev)
805806
return -EINVAL;
@@ -808,6 +809,15 @@ static int init_event_waiter(struct kfd_process *p,
808809
waiter->event = ev;
809810
waiter->activated = ev->signaled;
810811
ev->signaled = ev->signaled && !ev->auto_reset;
812+
813+
/* last_event_age = 0 reserved for backward compatible */
814+
if (waiter->event->type == KFD_EVENT_TYPE_SIGNAL &&
815+
event_data->signal_event_data.last_event_age) {
816+
waiter->event_age_enabled = true;
817+
if (ev->event_age != event_data->signal_event_data.last_event_age)
818+
waiter->activated = true;
819+
}
820+
811821
if (!waiter->activated)
812822
add_wait_queue(&ev->wq, &waiter->wait);
813823
spin_unlock(&ev->lock);
@@ -948,8 +958,7 @@ int kfd_wait_on_events(struct kfd_process *p,
948958
goto out_unlock;
949959
}
950960

951-
ret = init_event_waiter(p, &event_waiters[i],
952-
event_data.event_id);
961+
ret = init_event_waiter(p, &event_waiters[i], &event_data);
953962
if (ret)
954963
goto out_unlock;
955964
}

0 commit comments

Comments
 (0)