Commit 96cdb538 authored by James Zhu's avatar James Zhu Committed by Alex Deucher
Browse files

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: 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 4057e6ce
Loading
Loading
Loading
Loading
+13 −4
Original line number Diff line number Diff line
@@ -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;
	}