Commit 9736387a authored by Chris Wilson's avatar Chris Wilson
Browse files

drm/i915: Reduce test_and_set_bit to set_bit in i915_request_submit()



Avoid the full blown memory barrier of test_and_set_bit() by noting the
completed request and removing it from the lists.

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-5-chris@chris-wilson.co.uk
parent 2d60d3e0
Loading
Loading
Loading
Loading
+9 −7
Original line number Diff line number Diff line
@@ -551,8 +551,10 @@ bool __i915_request_submit(struct i915_request *request)
	 * dropped upon retiring. (Otherwise if resubmit a *retired*
	 * request, this would be a horrible use-after-free.)
	 */
	if (__i915_request_is_complete(request))
		goto xfer;
	if (__i915_request_is_complete(request)) {
		list_del_init(&request->sched.link);
		goto active;
	}

	if (unlikely(intel_context_is_banned(request->context)))
		i915_request_set_error_once(request, -EIO);
@@ -587,11 +589,11 @@ bool __i915_request_submit(struct i915_request *request)
	engine->serial++;
	result = true;

xfer:
	if (!test_and_set_bit(I915_FENCE_FLAG_ACTIVE, &request->fence.flags)) {
	GEM_BUG_ON(test_bit(I915_FENCE_FLAG_ACTIVE, &request->fence.flags));
	list_move_tail(&request->sched.link, &engine->active.requests);
active:
	clear_bit(I915_FENCE_FLAG_PQUEUE, &request->fence.flags);
	}
	set_bit(I915_FENCE_FLAG_ACTIVE, &request->fence.flags);

	/*
	 * XXX Rollback bonded-execution on __i915_request_unsubmit()?