Module Name: src
Committed By: riastradh
Date: Thu Feb 26 19:43:43 UTC 2015
Modified Files:
src/sys/external/bsd/drm2/dist/drm/i915: i915_gem.c
Log Message:
Fix return code of __wait_seqno.
MAX(ret, 0) is 0 if ret is negative, but if ret is negative we want
to return that negative value, meaning error. Should've been
MIN(ret, 0), but I'll just rewrite it to clarify a wee bit.
If the GPU reset, call i915_gem_check_wedge and always return failure
like Linux does. Caller must retry in that case.
To generate a diff of this commit:
cvs rdiff -u -r1.20 -r1.21 src/sys/external/bsd/drm2/dist/drm/i915/i915_gem.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/external/bsd/drm2/dist/drm/i915/i915_gem.c
diff -u src/sys/external/bsd/drm2/dist/drm/i915/i915_gem.c:1.20 src/sys/external/bsd/drm2/dist/drm/i915/i915_gem.c:1.21
--- src/sys/external/bsd/drm2/dist/drm/i915/i915_gem.c:1.20 Thu Feb 26 14:10:14 2015
+++ src/sys/external/bsd/drm2/dist/drm/i915/i915_gem.c Thu Feb 26 19:43:43 2015
@@ -1457,7 +1457,15 @@ __wait_seqno(struct intel_ring_buffer *r
else
timespecclear(timeout);
}
- return MAX(ret, 0); /* ignore remaining ticks */
+ if (wedged) { /* GPU reset while we were waiting. */
+ ret = i915_gem_check_wedge(&dev_priv->gpu_error,
+ interruptible);
+ if (ret == 0)
+ ret = -EAGAIN;
+ }
+ if (ret < 0) /* Failure. */
+ return ret;
+ return 0; /* Success, possibly with time to spare. */
}
#else
static int __wait_seqno(struct intel_ring_buffer *ring, u32 seqno,