drm/i915: Dump the whole context object.
As we've learned over time, the HW context is just a series of GPU commands that we're able to decode without any changes in intel_error_decode. Since many bugs recently have been implicated in the HW context state, it makes sense to dump the whole context object in a form which can be parsed. Sample: render ring --- HW Context = 0x042db000 ringbuffer (render ring) at 0x0160c000; HEAD points to: 0x0160c000 0x0160c000: 0x00000000: MI_NOOP 0x0160c004: 0x00000000: MI_NOOP 0x0160c008: 0x00000000: MI_NOOP 0x0160c00c: 0x00000000: MI_NOOP 0x0160c010: 0x00000000: MI_NOOP 0x0160c014: 0x00000000: MI_NOOP 0x0160c018: 0x00000000: MI_NOOP 0x0160c01c: 0x00000000: MI_NOOP Unfortunately, our decoder isn't quite smart enough to deal with the variable length LRIs - but that is a tools problem. Signed-off-by: Ben Widawsky <ben@bwidawsk.net> [danvet: Clarify commit message a bit, seems to have lost a few crucial words.] Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
This commit is contained in:
parent
9393707190
commit
17d36749a5
|
@ -453,16 +453,7 @@ int i915_error_state_to_str(struct drm_i915_error_state_buf *m,
|
||||||
err_printf(m, "%s --- HW Context = 0x%08x\n",
|
err_printf(m, "%s --- HW Context = 0x%08x\n",
|
||||||
dev_priv->ring[i].name,
|
dev_priv->ring[i].name,
|
||||||
obj->gtt_offset);
|
obj->gtt_offset);
|
||||||
offset = 0;
|
print_error_obj(m, obj);
|
||||||
for (elt = 0; elt < PAGE_SIZE/16; elt += 4) {
|
|
||||||
err_printf(m, "[%04x] %08x %08x %08x %08x\n",
|
|
||||||
offset,
|
|
||||||
obj->pages[0][elt],
|
|
||||||
obj->pages[0][elt+1],
|
|
||||||
obj->pages[0][elt+2],
|
|
||||||
obj->pages[0][elt+3]);
|
|
||||||
offset += 16;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -878,10 +869,7 @@ static void i915_gem_record_active_context(struct intel_ring_buffer *ring,
|
||||||
|
|
||||||
list_for_each_entry(obj, &dev_priv->mm.bound_list, global_list) {
|
list_for_each_entry(obj, &dev_priv->mm.bound_list, global_list) {
|
||||||
if ((error->ccid & PAGE_MASK) == i915_gem_obj_ggtt_offset(obj)) {
|
if ((error->ccid & PAGE_MASK) == i915_gem_obj_ggtt_offset(obj)) {
|
||||||
ering->ctx = i915_error_object_create_sized(dev_priv,
|
ering->ctx = i915_error_ggtt_object_create(dev_priv, obj);
|
||||||
obj,
|
|
||||||
&dev_priv->gtt.base,
|
|
||||||
1);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue