diff options
Diffstat (limited to 'drivers/gpu/drm/i915/i915_irq.c')
| -rw-r--r-- | drivers/gpu/drm/i915/i915_irq.c | 23 | 
1 files changed, 23 insertions, 0 deletions
diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c index 12561f2f7fd..2139714b2a6 100644 --- a/drivers/gpu/drm/i915/i915_irq.c +++ b/drivers/gpu/drm/i915/i915_irq.c @@ -1242,6 +1242,26 @@ static void i915_record_ring_state(struct drm_device *dev,  	error->cpu_ring_tail[ring->id] = ring->tail;  } + +static void i915_gem_record_active_context(struct intel_ring_buffer *ring, +					   struct drm_i915_error_state *error, +					   struct drm_i915_error_ring *ering) +{ +	struct drm_i915_private *dev_priv = ring->dev->dev_private; +	struct drm_i915_gem_object *obj; + +	/* Currently render ring is the only HW context user */ +	if (ring->id != RCS || !error->ccid) +		return; + +	list_for_each_entry(obj, &dev_priv->mm.bound_list, gtt_list) { +		if ((error->ccid & PAGE_MASK) == obj->gtt_offset) { +			ering->ctx = i915_error_object_create_sized(dev_priv, +								    obj, 1); +		} +	} +} +  static void i915_gem_record_rings(struct drm_device *dev,  				  struct drm_i915_error_state *error)  { @@ -1259,6 +1279,9 @@ static void i915_gem_record_rings(struct drm_device *dev,  		error->ring[i].ringbuffer =  			i915_error_object_create(dev_priv, ring->obj); + +		i915_gem_record_active_context(ring, error, &error->ring[i]); +  		count = 0;  		list_for_each_entry(request, &ring->request_list, list)  			count++;  |