Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e2f973d5 authored by Chris Wilson's avatar Chris Wilson
Browse files

drm/i915: Record all error ringbuffers

parent 21dd3734
Loading
Loading
Loading
Loading
+14 −9
Original line number Diff line number Diff line
@@ -805,18 +805,23 @@ static int i915_error_state(struct seq_file *m, void *unused)
		}
	}

	if (error->ringbuffer) {
		struct drm_i915_error_object *obj = error->ringbuffer;

		seq_printf(m, "--- ringbuffer = 0x%08x\n", obj->gtt_offset);
	for (i = 0; i < ARRAY_SIZE(error->ringbuffer); i++) {
		if (error->ringbuffer[i]) {
			struct drm_i915_error_object *obj = error->ringbuffer[i];
			seq_printf(m, "%s --- ringbuffer = 0x%08x\n",
				   dev_priv->ring[i].name,
				   obj->gtt_offset);
			offset = 0;
			for (page = 0; page < obj->page_count; page++) {
				for (elt = 0; elt < PAGE_SIZE/4; elt++) {
				seq_printf(m, "%08x :  %08x\n", offset, obj->pages[page][elt]);
					seq_printf(m, "%08x :  %08x\n",
						   offset,
						   obj->pages[page][elt]);
					offset += 4;
				}
			}
		}
	}

	if (error->overlay)
		intel_overlay_print_error_state(m, error->overlay);
+1 −1
Original line number Diff line number Diff line
@@ -174,7 +174,7 @@ struct drm_i915_error_state {
		int page_count;
		u32 gtt_offset;
		u32 *pages[0];
	} *ringbuffer, *batchbuffer[I915_NUM_RINGS];
	} *ringbuffer[I915_NUM_RINGS], *batchbuffer[I915_NUM_RINGS];
	struct drm_i915_error_buffer {
		u32 size;
		u32 name;
+14 −8
Original line number Diff line number Diff line
@@ -648,9 +648,14 @@ static void
i915_error_state_free(struct drm_device *dev,
		      struct drm_i915_error_state *error)
{
	i915_error_object_free(error->batchbuffer[0]);
	i915_error_object_free(error->batchbuffer[1]);
	i915_error_object_free(error->ringbuffer);
	int i;

	for (i = 0; i < ARRAY_SIZE(error->batchbuffer); i++)
		i915_error_object_free(error->batchbuffer[i]);

	for (i = 0; i < ARRAY_SIZE(error->ringbuffer); i++)
		i915_error_object_free(error->ringbuffer[i]);

	kfree(error->active_bo);
	kfree(error->overlay);
	kfree(error);
@@ -824,15 +829,16 @@ static void i915_capture_error_state(struct drm_device *dev)
	}
	i915_gem_record_fences(dev, error);

	/* Record the active batchbuffers */
	for (i = 0; i < I915_NUM_RINGS; i++)
	/* Record the active batch and ring buffers */
	for (i = 0; i < I915_NUM_RINGS; i++) {
		error->batchbuffer[i] =
			i915_error_first_batchbuffer(dev_priv,
						     &dev_priv->ring[i]);

	/* Record the ringbuffer */
	error->ringbuffer = i915_error_object_create(dev_priv,
						     dev_priv->ring[RCS].obj);
		error->ringbuffer[i] =
			i915_error_object_create(dev_priv,
						 dev_priv->ring[i].obj);
	}

	/* Record buffers on the active and pinned lists. */
	error->active_bo = NULL;