Commit 163433e5 authored by Chris Wilson's avatar Chris Wilson
Browse files

drm/i915: Mark up protected uses of 'i915_request_completed'



When we know that we are inside the timeline mutex, or inside the
submission flow (under active.lock or the holder's rcu lock), we know
that the rq->hwsp is stable and we can use the simpler direct version.

Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: default avatarAndi Shyti <andi.shyti@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20210114135612.13210-1-chris@chris-wilson.co.uk
parent d263dfa7
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -408,7 +408,7 @@ __active_engine(struct i915_request *rq, struct intel_engine_cs **active)
	}

	if (i915_request_is_active(rq)) {
		if (!i915_request_completed(rq))
		if (!__i915_request_is_complete(rq))
			*active = locked;
		ret = true;
	}
+2 −2
Original line number Diff line number Diff line
@@ -517,8 +517,8 @@ static void print_signals(struct intel_breadcrumbs *b, struct drm_printer *p)
		list_for_each_entry_rcu(rq, &ce->signals, signal_link)
			drm_printf(p, "\t[%llx:%llx%s] @ %dms\n",
				   rq->fence.context, rq->fence.seqno,
				   i915_request_completed(rq) ? "!" :
				   i915_request_started(rq) ? "*" :
				   __i915_request_is_complete(rq) ? "!" :
				   __i915_request_has_started(rq) ? "*" :
				   "",
				   jiffies_to_msecs(jiffies - rq->emitted_jiffies));
	}
+3 −3
Original line number Diff line number Diff line
@@ -1811,7 +1811,7 @@ intel_engine_find_active_request(struct intel_engine_cs *engine)
		struct intel_timeline *tl = request->context->timeline;

		list_for_each_entry_from_reverse(request, &tl->requests, link) {
			if (i915_request_completed(request))
			if (__i915_request_is_complete(request))
				break;

			active = request;
@@ -1822,10 +1822,10 @@ intel_engine_find_active_request(struct intel_engine_cs *engine)
		return active;

	list_for_each_entry(request, &engine->active.requests, sched.link) {
		if (i915_request_completed(request))
		if (__i915_request_is_complete(request))
			continue;

		if (!i915_request_started(request))
		if (!__i915_request_has_started(request))
			continue;

		/* More than one preemptible request may match! */
+2 −2
Original line number Diff line number Diff line
@@ -3291,7 +3291,7 @@ static void rcu_virtual_context_destroy(struct work_struct *wrk)

		old = fetch_and_zero(&ve->request);
		if (old) {
			GEM_BUG_ON(!i915_request_completed(old));
			GEM_BUG_ON(!__i915_request_is_complete(old));
			__i915_request_submit(old);
			i915_request_put(old);
		}
@@ -3568,7 +3568,7 @@ static void virtual_submit_request(struct i915_request *rq)
	}

	if (ve->request) { /* background completion from preempt-to-busy */
		GEM_BUG_ON(!i915_request_completed(ve->request));
		GEM_BUG_ON(!__i915_request_is_complete(ve->request));
		__i915_request_submit(ve->request);
		i915_request_put(ve->request);
	}
+1 −2
Original line number Diff line number Diff line
@@ -151,8 +151,7 @@ static void mark_innocent(struct i915_request *rq)
void __i915_request_reset(struct i915_request *rq, bool guilty)
{
	RQ_TRACE(rq, "guilty? %s\n", yesno(guilty));

	GEM_BUG_ON(i915_request_completed(rq));
	GEM_BUG_ON(__i915_request_is_complete(rq));

	rcu_read_lock(); /* protect the GEM context */
	if (guilty) {
Loading