[PATCH 3/3] dump

Chris Wilson chris at chris-wilson.co.uk
Sat Nov 23 10:56:21 UTC 2019


---
 drivers/gpu/drm/i915/gt/intel_gt.c | 38 +++++++++++++++++++++++++++++-
 1 file changed, 37 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/i915/gt/intel_gt.c b/drivers/gpu/drm/i915/gt/intel_gt.c
index c4fd8d65b8a3..0faaa0ab3baa 100644
--- a/drivers/gpu/drm/i915/gt/intel_gt.c
+++ b/drivers/gpu/drm/i915/gt/intel_gt.c
@@ -378,9 +378,45 @@ int intel_gt_init(struct intel_gt *gt)
 	return 0;
 }
 
+static void dump(struct intel_gt *gt)
+{
+	struct drm_printer p = drm_err_printer("AWAKE");
+	struct intel_engine_cs *engine;
+	enum intel_engine_id id;
+	struct intel_timeline *tl;
+
+	drm_printf(&p, "GT awake? %s [%d]\n",
+		   yesno(gt->awake),
+		   atomic_read(&gt->wakeref.count));
+	for_each_engine(engine, gt, id)
+		intel_engine_dump(engine, &p, "%s\n", engine->name);
+
+	spin_lock(&gt->timelines.lock);
+	list_for_each_entry(tl, &gt->timelines.active_list, link) {
+		struct dma_fence *fence;
+		struct list_head *it;
+		unsigned long count;
+
+		count = 0;
+		list_for_each(it, &tl->requests)
+			count++;
+
+		fence = i915_active_fence_get(&tl->last_request);
+		drm_printf(&p, "Timeline %llx:{active:%d, count:%lu, last_fence:%llx:%lld}\n",
+			   tl->fence_context,
+			   atomic_read(&tl->active_count),
+			   count,
+			   fence ? fence->context : 0,
+			   fence ? fence->seqno : 0);
+		dma_fence_put(fence);
+	}
+	spin_unlock(&gt->timelines.lock);
+}
+
 void intel_gt_driver_remove(struct intel_gt *gt)
 {
-	GEM_BUG_ON(gt->awake);
+	if (GEM_DEBUG_WARN_ON(gt->awake))
+		dump(gt);
 }
 
 void intel_gt_driver_unregister(struct intel_gt *gt)
-- 
2.24.0



More information about the Intel-gfx-trybot mailing list