[PATCH 3/4] dump
Chris Wilson
chris at chris-wilson.co.uk
Sat Nov 23 19:13:13 UTC 2019
---
drivers/gpu/drm/i915/gt/intel_gt.c | 50 +++++++++++++++++++++++++++++-
1 file changed, 49 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..9285e619a961 100644
--- a/drivers/gpu/drm/i915/gt/intel_gt.c
+++ b/drivers/gpu/drm/i915/gt/intel_gt.c
@@ -378,9 +378,57 @@ int intel_gt_init(struct intel_gt *gt)
return 0;
}
+static void print_engines(struct intel_gt *gt, struct drm_printer *p)
+{
+ struct intel_engine_cs *engine;
+ enum intel_engine_id id;
+
+ for_each_engine(engine, gt, id)
+ intel_engine_dump(engine, p, "%s\n", engine->name);
+}
+
+static void print_timelines(struct intel_gt *gt, struct drm_printer *p)
+{
+ struct intel_timeline *tl;
+
+ spin_lock(>->timelines.lock);
+ list_for_each_entry(tl, >->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(>->timelines.lock);
+}
+
+static void dump(struct intel_gt *gt)
+{
+ struct drm_printer p = drm_err_printer("AWAKE");
+
+ drm_printf(&p, "GT awake? %s [%d]\n",
+ yesno(gt->awake),
+ atomic_read(>->wakeref.count));
+
+ print_engines(gt, &p);
+ print_timelines(gt, &p);
+}
+
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