diff options
Diffstat (limited to 'drivers/gpu/drm/i915/i915_irq.c')
-rw-r--r-- | drivers/gpu/drm/i915/i915_irq.c | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c index a4dc97f8b9f0..2220dec3e5d9 100644 --- a/drivers/gpu/drm/i915/i915_irq.c +++ b/drivers/gpu/drm/i915/i915_irq.c | |||
@@ -1087,6 +1087,18 @@ i915_error_first_batchbuffer(struct drm_i915_private *dev_priv, | |||
1087 | if (!ring->get_seqno) | 1087 | if (!ring->get_seqno) |
1088 | return NULL; | 1088 | return NULL; |
1089 | 1089 | ||
1090 | if (HAS_BROKEN_CS_TLB(dev_priv->dev)) { | ||
1091 | u32 acthd = I915_READ(ACTHD); | ||
1092 | |||
1093 | if (WARN_ON(ring->id != RCS)) | ||
1094 | return NULL; | ||
1095 | |||
1096 | obj = ring->private; | ||
1097 | if (acthd >= obj->gtt_offset && | ||
1098 | acthd < obj->gtt_offset + obj->base.size) | ||
1099 | return i915_error_object_create(dev_priv, obj); | ||
1100 | } | ||
1101 | |||
1090 | seqno = ring->get_seqno(ring, false); | 1102 | seqno = ring->get_seqno(ring, false); |
1091 | list_for_each_entry(obj, &dev_priv->mm.active_list, mm_list) { | 1103 | list_for_each_entry(obj, &dev_priv->mm.active_list, mm_list) { |
1092 | if (obj->ring != ring) | 1104 | if (obj->ring != ring) |