diff options
author | Chris Wilson <chris@chris-wilson.co.uk> | 2016-08-04 07:52:38 +0100 |
---|---|---|
committer | Chris Wilson <chris@chris-wilson.co.uk> | 2016-08-04 08:09:27 +0100 |
commit | 7da844c5c6fcb7a3575dd20701b481fe86918ab0 (patch) | |
tree | f62ca81c0435101a1cd0313544655683ab6507f7 /drivers/gpu/drm/i915/intel_ringbuffer.c | |
parent | 0d9bdd886f295b62c254a99da4153e7d287adb12 (diff) | |
download | kernel_replicant_linux-7da844c5c6fcb7a3575dd20701b481fe86918ab0.tar.gz kernel_replicant_linux-7da844c5c6fcb7a3575dd20701b481fe86918ab0.tar.bz2 kernel_replicant_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.c | 18 |
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)) { |