summaryrefslogtreecommitdiff
path: root/drivers/gpu
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2017-01-10 20:22:44 +0300
committerChris Wilson <chris@chris-wilson.co.uk>2017-01-10 23:49:30 +0300
commit3c1b284759876785e31335d0f2278bfd507a1862 (patch)
tree291676ee4849e4195fdc2c798085c17f750f8976 /drivers/gpu
parentc0d5f32c5043e8568ffdbcff60dfba26f408fa10 (diff)
downloadlinux-3c1b284759876785e31335d0f2278bfd507a1862.tar.xz
drm/i915: Set an error status for a resubmitted request
Let userspace know if its request was resubmitted due to it being executed at the time of a global reset. In this case, the reset was for a guilty request on another engine, and this request was an innocent victim that will be re-executed upon restarting. However, since it was running at the time of the reset, we can not guarantee that it suffered no ill-effects from the reset (e.g. some context state may be lost, or some self-modifying fragment shaders will be restarted from the final state not their initial state), to let userspace know that it has been corrupted set a special value on the fence->error, -EAGAIN. If the request does hang on resubmission, the error will be overwritten with -EIO. Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com> Cc: Mika Kuoppala <mika.kuoppala@linux.intel.com> Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com> Link: http://patchwork.freedesktop.org/patch/msgid/20170110172246.27297-3-chris@chris-wilson.co.uk
Diffstat (limited to 'drivers/gpu')
-rw-r--r--drivers/gpu/drm/i915/i915_gem.c1
1 files changed, 1 insertions, 0 deletions
diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
index 324a49813668..94ad9eb83a5c 100644
--- a/drivers/gpu/drm/i915/i915_gem.c
+++ b/drivers/gpu/drm/i915/i915_gem.c
@@ -2665,6 +2665,7 @@ static void i915_gem_reset_engine(struct intel_engine_cs *engine)
reset_request(request);
} else {
i915_gem_context_mark_innocent(hung_ctx);
+ dma_fence_set_error(&request->fence, -EAGAIN);
return;
}