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

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

drm/i915: Record AGP memory type upon error

parent 0a58705b
Loading
Loading
Loading
Loading
+12 −2
Original line number Original line Diff line number Diff line
@@ -624,6 +624,15 @@ static const char *ring_str(int ring)
	}
	}
}
}


static const char *agp_type_str(int type)
{
	switch (type) {
	case 0: return " uncached";
	case 1: return " snooped";
	default: return "";
	}
}

static const char *pin_flag(int pinned)
static const char *pin_flag(int pinned)
{
{
	if (pinned > 0)
	if (pinned > 0)
@@ -662,7 +671,7 @@ static void print_error_buffers(struct seq_file *m,
	seq_printf(m, "%s [%d]:\n", name, count);
	seq_printf(m, "%s [%d]:\n", name, count);


	while (count--) {
	while (count--) {
		seq_printf(m, "  %08x %8zd %04x %04x %08x%s%s%s%s%s",
		seq_printf(m, "  %08x %8zd %04x %04x %08x%s%s%s%s%s%s",
			   err->gtt_offset,
			   err->gtt_offset,
			   err->size,
			   err->size,
			   err->read_domains,
			   err->read_domains,
@@ -672,7 +681,8 @@ static void print_error_buffers(struct seq_file *m,
			   tiling_flag(err->tiling),
			   tiling_flag(err->tiling),
			   dirty_flag(err->dirty),
			   dirty_flag(err->dirty),
			   purgeable_flag(err->purgeable),
			   purgeable_flag(err->purgeable),
			   ring_str(err->ring));
			   ring_str(err->ring),
			   agp_type_str(err->agp_type));


		if (err->name)
		if (err->name)
			seq_printf(m, " (name: %d)", err->name);
			seq_printf(m, " (name: %d)", err->name);
+3 −2
Original line number Original line Diff line number Diff line
@@ -174,18 +174,19 @@ struct drm_i915_error_state {
		u32 *pages[0];
		u32 *pages[0];
	} *ringbuffer, *batchbuffer[I915_NUM_RINGS];
	} *ringbuffer, *batchbuffer[I915_NUM_RINGS];
	struct drm_i915_error_buffer {
	struct drm_i915_error_buffer {
		size_t size;
		u32 size;
		u32 name;
		u32 name;
		u32 seqno;
		u32 seqno;
		u32 gtt_offset;
		u32 gtt_offset;
		u32 read_domains;
		u32 read_domains;
		u32 write_domain;
		u32 write_domain;
		u32 fence_reg;
		s32 fence_reg:5;
		s32 pinned:2;
		s32 pinned:2;
		u32 tiling:2;
		u32 tiling:2;
		u32 dirty:1;
		u32 dirty:1;
		u32 purgeable:1;
		u32 purgeable:1;
		u32 ring:4;
		u32 ring:4;
		u32 agp_type:1;
	} *active_bo, *pinned_bo;
	} *active_bo, *pinned_bo;
	u32 active_bo_count, pinned_bo_count;
	u32 active_bo_count, pinned_bo_count;
	struct intel_overlay_error_state *overlay;
	struct intel_overlay_error_state *overlay;
+1 −0
Original line number Original line Diff line number Diff line
@@ -665,6 +665,7 @@ static u32 capture_bo_list(struct drm_i915_error_buffer *err,
		err->dirty = obj->dirty;
		err->dirty = obj->dirty;
		err->purgeable = obj->madv != I915_MADV_WILLNEED;
		err->purgeable = obj->madv != I915_MADV_WILLNEED;
		err->ring = obj->ring ? obj->ring->id : 0;
		err->ring = obj->ring ? obj->ring->id : 0;
		err->agp_type = obj->agp_type == AGP_USER_CACHED_MEMORY;


		if (++i == count)
		if (++i == count)
			break;
			break;