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,

Reply via email to