[PATCH 1/4] drm/i915: Dump the ringbuffer of the active request for debugging
Chris Wilson
chris at chris-wilson.co.uk
Wed Jun 13 10:08:36 UTC 2018
Sometimes we need to see what instructions we emitted for a request to
try and gather a glimmer of insight into what the GPU is doing when it
stops responding.
Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
---
drivers/gpu/drm/i915/intel_engine_cs.c | 32 ++++++++++++++++++++++++++
1 file changed, 32 insertions(+)
diff --git a/drivers/gpu/drm/i915/intel_engine_cs.c b/drivers/gpu/drm/i915/intel_engine_cs.c
index d278fed8cb31..843ae313e7a4 100644
--- a/drivers/gpu/drm/i915/intel_engine_cs.c
+++ b/drivers/gpu/drm/i915/intel_engine_cs.c
@@ -1532,6 +1532,38 @@ void intel_engine_dump(struct intel_engine_cs *engine,
yesno(test_bit(ENGINE_IRQ_EXECLIST,
&engine->irq_posted)));
+ rcu_read_lock();
+
+ rq = i915_gem_find_active_request(engine);
+ if (rq) {
+ void *ring;
+ int size;
+
+ size = rq->tail - rq->head;
+ if (rq->tail < rq->head)
+ size += rq->ring->size;
+
+ ring = kmalloc(size, GFP_ATOMIC);
+ if (ring) {
+ void *vaddr = rq->ring->vaddr;
+ unsigned int head = rq->head;
+ unsigned int len = 0;
+
+ if (rq->tail < head) {
+ len = rq->ring->size - head;
+ memcpy(ring, vaddr + head, len);
+ head = 0;
+ }
+ memcpy(ring + len, vaddr + head, rq->tail - head);
+
+ drm_printf(m, "RING (active request):\n");
+ hexdump(m, ring, size);
+ kfree(ring);
+ }
+ }
+
+ rcu_read_unlock();
+
drm_printf(m, "HWSP:\n");
hexdump(m, engine->status_page.page_addr, PAGE_SIZE);
--
2.17.1
More information about the Intel-gfx-trybot
mailing list