Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/sys/external/bsd/drm2/dist/drm/i915 Fix two mistakes in prev...
details: https://anonhg.NetBSD.org/src/rev/56a432eb685a
branches: trunk
changeset: 331862:56a432eb685a
user: riastradh <riastradh%NetBSD.org@localhost>
date: Wed Aug 27 15:31:08 2014 +0000
description:
Fix two mistakes in previous.
- i915_error_wake_up is given irq_lock, so it need not take that.
- Unlock irq_lock on exit from i915_hangcheck_elapsed if ring_hung.
XXX This introduces the lock order irq_lock -> pending_flip_lock.
How about just using irq_lock for pending flips?
diffstat:
sys/external/bsd/drm2/dist/drm/i915/i915_irq.c | 10 ++++++----
1 files changed, 6 insertions(+), 4 deletions(-)
diffs (30 lines):
diff -r c50ee09edeb6 -r 56a432eb685a sys/external/bsd/drm2/dist/drm/i915/i915_irq.c
--- a/sys/external/bsd/drm2/dist/drm/i915/i915_irq.c Wed Aug 27 13:56:02 2014 +0000
+++ b/sys/external/bsd/drm2/dist/drm/i915/i915_irq.c Wed Aug 27 15:31:08 2014 +0000
@@ -2138,11 +2138,10 @@
* a gpu reset pending so that i915_error_work_func can acquire them).
*/
+ assert_spin_locked(&dev_priv->irq_lock);
#ifdef __NetBSD__
- spin_lock(&dev_priv->irq_lock);
for_each_ring(ring, dev_priv, i)
DRM_SPIN_WAKEUP_ALL(&ring->irq_queue, &dev_priv->irq_lock);
- spin_unlock(&dev_priv->irq_lock);
spin_lock(&dev_priv->pending_flip_lock);
DRM_SPIN_WAKEUP_ALL(&dev_priv->pending_flip_queue,
@@ -2849,8 +2848,11 @@
}
}
- if (rings_hung)
- return i915_handle_error(dev, true, "Ring hung");
+ if (rings_hung) {
+ i915_handle_error(dev, true, "Ring hung");
+ spin_unlock(&dev_priv->irq_lock);
+ return;
+ }
spin_unlock(&dev_priv->irq_lock);
Home |
Main Index |
Thread Index |
Old Index