summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/i915/i915_gem_request.c
diff options
context:
space:
mode:
authorChris Wilson2017-02-23 08:44:11 +0100
committerChris Wilson2017-02-23 15:49:29 +0100
commit7de53bf7e6f3f823267f77b1fe19e6db7532000d (patch)
treea438bcfdb236d7896d12b87c20cbeaf9f2144323 /drivers/gpu/drm/i915/i915_gem_request.c
parentdrm/i915: Use a local to shorten req->i915->gpu_error.wait_queue (diff)
downloadkernel-qcow2-linux-7de53bf7e6f3f823267f77b1fe19e6db7532000d.tar.gz
kernel-qcow2-linux-7de53bf7e6f3f823267f77b1fe19e6db7532000d.tar.xz
kernel-qcow2-linux-7de53bf7e6f3f823267f77b1fe19e6db7532000d.zip
drm/i915: Add ourselves to the gpu error waitqueue for the entire wait
Add ourselves to the gpu error waitqueue earlier on, even before we determine we have to wait on the seqno. This is so that we can then share the waitqueue between stages in subsequent patches. Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Reviewed-by: Joonas Lahtinen <joonas.lahtinen@linux.intel.com> Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com> Link: http://patchwork.freedesktop.org/patch/msgid/20170223074422.4125-6-chris@chris-wilson.co.uk
Diffstat (limited to 'drivers/gpu/drm/i915/i915_gem_request.c')
-rw-r--r--drivers/gpu/drm/i915/i915_gem_request.c10
1 files changed, 5 insertions, 5 deletions
diff --git a/drivers/gpu/drm/i915/i915_gem_request.c b/drivers/gpu/drm/i915/i915_gem_request.c
index a40b825763a3..80142a6027da 100644
--- a/drivers/gpu/drm/i915/i915_gem_request.c
+++ b/drivers/gpu/drm/i915/i915_gem_request.c
@@ -1097,6 +1097,9 @@ long i915_wait_request(struct drm_i915_gem_request *req,
trace_i915_gem_request_wait_begin(req, flags);
+ if (flags & I915_WAIT_LOCKED)
+ add_wait_queue(errq, &reset);
+
if (!i915_sw_fence_done(&req->execute)) {
timeout = __i915_request_wait_for_execute(req, flags, timeout);
if (timeout < 0)
@@ -1112,9 +1115,6 @@ long i915_wait_request(struct drm_i915_gem_request *req,
goto complete;
set_current_state(state);
- if (flags & I915_WAIT_LOCKED)
- add_wait_queue(errq, &reset);
-
intel_wait_init(&wait, req->global_seqno);
if (intel_engine_add_wait(req->engine, &wait))
/* In order to check that we haven't missed the interrupt
@@ -1174,11 +1174,11 @@ wakeup:
}
intel_engine_remove_wait(req->engine, &wait);
- if (flags & I915_WAIT_LOCKED)
- remove_wait_queue(errq, &reset);
__set_current_state(TASK_RUNNING);
complete:
+ if (flags & I915_WAIT_LOCKED)
+ remove_wait_queue(errq, &reset);
trace_i915_gem_request_wait_end(req);
return timeout;