Module Name:    src
Committed By:   riastradh
Date:           Sat Feb 28 04:54:12 UTC 2015

Modified Files:
        src/sys/external/bsd/drm2/dist/drm/i915: intel_dp.c intel_i2c.c

Log Message:
Fix two more gmbus wait bugs.

- Fix sense of return value in intel_dp_aux_wait_done.
- Make the waits uninterruptible here like in Linux.


To generate a diff of this commit:
cvs rdiff -u -r1.9 -r1.10 src/sys/external/bsd/drm2/dist/drm/i915/intel_dp.c
cvs rdiff -u -r1.7 -r1.8 src/sys/external/bsd/drm2/dist/drm/i915/intel_i2c.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/intel_dp.c
diff -u src/sys/external/bsd/drm2/dist/drm/i915/intel_dp.c:1.9 src/sys/external/bsd/drm2/dist/drm/i915/intel_dp.c:1.10
--- src/sys/external/bsd/drm2/dist/drm/i915/intel_dp.c:1.9	Thu Nov  6 12:47:48 2014
+++ src/sys/external/bsd/drm2/dist/drm/i915/intel_dp.c	Sat Feb 28 04:54:12 2015
@@ -371,10 +371,16 @@ intel_dp_aux_wait_done(struct intel_dp *
 	if (has_aux_irq && !cold) {
 		int ret;
 		spin_lock(&dev_priv->gmbus_wait_lock);
-		DRM_SPIN_TIMED_WAIT_UNTIL(ret, &dev_priv->gmbus_wait_queue,
-		    &dev_priv->gmbus_wait_lock, msecs_to_jiffies_timeout(10),
+		DRM_SPIN_TIMED_WAIT_NOINTR_UNTIL(ret,
+		    &dev_priv->gmbus_wait_queue, &dev_priv->gmbus_wait_lock,
+		    msecs_to_jiffies_timeout(10),
 		    C);
-		done = ret;	/* XXX ugh */
+		if (ret < 0)	/* Failure: pretend same as done.  */
+			done = true;
+		else if (ret == 0) /* Timed out: not done.  */
+			done = false;
+		else		/* Succeeded (ret > 0): done.  */
+			done = true;
 		spin_unlock(&dev_priv->gmbus_wait_lock);
 	} else {
 		done = wait_for_atomic(C, 10) == 0;

Index: src/sys/external/bsd/drm2/dist/drm/i915/intel_i2c.c
diff -u src/sys/external/bsd/drm2/dist/drm/i915/intel_i2c.c:1.7 src/sys/external/bsd/drm2/dist/drm/i915/intel_i2c.c:1.8
--- src/sys/external/bsd/drm2/dist/drm/i915/intel_i2c.c:1.7	Fri Feb 27 04:40:17 2015
+++ src/sys/external/bsd/drm2/dist/drm/i915/intel_i2c.c	Sat Feb 28 04:54:12 2015
@@ -299,8 +299,9 @@ gmbus_wait_hw_status(struct drm_i915_pri
 		}
 	} else {
 		int ret;
-		DRM_SPIN_TIMED_WAIT_UNTIL(ret, &dev_priv->gmbus_wait_queue,
-		    &dev_priv->gmbus_wait_lock, mstohz(50),
+		DRM_SPIN_TIMED_WAIT_NOINTR_UNTIL(ret,
+		    &dev_priv->gmbus_wait_queue, &dev_priv->gmbus_wait_lock,
+		    mstohz(50),
 		    (gmbus2 = I915_READ_NOTRACE(GMBUS2 + reg_offset),
 			ISSET(gmbus2, (GMBUS_SATOER | gmbus2_status))));
 	}

Reply via email to