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,