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))));
}