mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-04-19 20:59:11 +08:00
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>
This commit is contained in:
@@ -41,6 +41,7 @@ struct kfd_event_waiter {
|
||||
wait_queue_entry_t wait;
|
||||
struct kfd_event *event; /* Event to wait for */
|
||||
bool activated; /* Becomes true when event is signaled */
|
||||
bool event_age_enabled; /* set to true when last_event_age is non-zero */
|
||||
};
|
||||
|
||||
/*
|
||||
@@ -797,9 +798,9 @@ static struct kfd_event_waiter *alloc_event_waiters(uint32_t num_events)
|
||||
|
||||
static int init_event_waiter(struct kfd_process *p,
|
||||
struct kfd_event_waiter *waiter,
|
||||
uint32_t event_id)
|
||||
struct kfd_event_data *event_data)
|
||||
{
|
||||
struct kfd_event *ev = lookup_event_by_id(p, event_id);
|
||||
struct kfd_event *ev = lookup_event_by_id(p, event_data->event_id);
|
||||
|
||||
if (!ev)
|
||||
return -EINVAL;
|
||||
@@ -808,6 +809,15 @@ static int init_event_waiter(struct kfd_process *p,
|
||||
waiter->event = ev;
|
||||
waiter->activated = ev->signaled;
|
||||
ev->signaled = ev->signaled && !ev->auto_reset;
|
||||
|
||||
/* last_event_age = 0 reserved for backward compatible */
|
||||
if (waiter->event->type == KFD_EVENT_TYPE_SIGNAL &&
|
||||
event_data->signal_event_data.last_event_age) {
|
||||
waiter->event_age_enabled = true;
|
||||
if (ev->event_age != event_data->signal_event_data.last_event_age)
|
||||
waiter->activated = true;
|
||||
}
|
||||
|
||||
if (!waiter->activated)
|
||||
add_wait_queue(&ev->wq, &waiter->wait);
|
||||
spin_unlock(&ev->lock);
|
||||
@@ -948,8 +958,7 @@ int kfd_wait_on_events(struct kfd_process *p,
|
||||
goto out_unlock;
|
||||
}
|
||||
|
||||
ret = init_event_waiter(p, &event_waiters[i],
|
||||
event_data.event_id);
|
||||
ret = init_event_waiter(p, &event_waiters[i], &event_data);
|
||||
if (ret)
|
||||
goto out_unlock;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user