summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/i915/intel_ringbuffer.c
diff options
context:
space:
mode:
authorChris Wilson2016-08-04 08:52:38 +0200
committerChris Wilson2016-08-04 09:09:27 +0200
commit7da844c5c6fcb7a3575dd20701b481fe86918ab0 (patch)
treef62ca81c0435101a1cd0313544655683ab6507f7 /drivers/gpu/drm/i915/intel_ringbuffer.c
parentdrm/i915: Convert intel_overlay to request tracking (diff)
downloadkernel-qcow2-linux-7da844c5c6fcb7a3575dd20701b481fe86918ab0.tar.gz
kernel-qcow2-linux-7da844c5c6fcb7a3575dd20701b481fe86918ab0.tar.xz
kernel-qcow2-linux-7da844c5c6fcb7a3575dd20701b481fe86918ab0.zip
drm/i915: Move the special case wait-request handling to its one caller
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Reviewed-by: Joonas Lahtinen <joonas.lahtinen@linux.intel.com> Link: http://patchwork.freedesktop.org/patch/msgid/1470293567-10811-19-git-send-email-chris@chris-wilson.co.uk
Diffstat (limited to 'drivers/gpu/drm/i915/intel_ringbuffer.c')
-rw-r--r--drivers/gpu/drm/i915/intel_ringbuffer.c18
1 files changed, 13 insertions, 5 deletions
diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.c b/drivers/gpu/drm/i915/intel_ringbuffer.c
index 5b0eac2af28c..542cf585121c 100644
--- a/drivers/gpu/drm/i915/intel_ringbuffer.c
+++ b/drivers/gpu/drm/i915/intel_ringbuffer.c
@@ -2269,6 +2269,7 @@ static int wait_for_space(struct drm_i915_gem_request *req, int bytes)
{
struct intel_ring *ring = req->ring;
struct drm_i915_gem_request *target;
+ int ret;
intel_ring_update_space(ring);
if (ring->space >= bytes)
@@ -2298,7 +2299,18 @@ static int wait_for_space(struct drm_i915_gem_request *req, int bytes)
if (WARN_ON(&target->ring_link == &ring->request_list))
return -ENOSPC;
- return i915_wait_request(target);
+ ret = __i915_wait_request(target, true, NULL, NULL);
+ if (ret)
+ return ret;
+
+ if (i915_reset_in_progress(&target->i915->gpu_error))
+ return -EAGAIN;
+
+ i915_gem_request_retire_upto(target);
+
+ intel_ring_update_space(ring);
+ GEM_BUG_ON(ring->space < bytes);
+ return 0;
}
int intel_ring_begin(struct drm_i915_gem_request *req, int num_dwords)
@@ -2336,10 +2348,6 @@ int intel_ring_begin(struct drm_i915_gem_request *req, int num_dwords)
int ret = wait_for_space(req, wait_bytes);
if (unlikely(ret))
return ret;
-
- intel_ring_update_space(ring);
- if (unlikely(ring->space < wait_bytes))
- return -EAGAIN;
}
if (unlikely(need_wrap)) {