OSDN Git Service

drm/i915: Show instdone for each engine in debugfs
authorChris Wilson <chris@chris-wilson.co.uk>
Thu, 4 Jul 2019 20:04:55 +0000 (21:04 +0100)
committerChris Wilson <chris@chris-wilson.co.uk>
Thu, 4 Jul 2019 21:55:03 +0000 (22:55 +0100)
Although polling each engine quickly is preferable as it should give us
a sample of each engine at roughly the same time, keep it simple and
just sample the engine as print out the debug state.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: Matthew Auld <matthew.auld@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20190704200455.14870-3-chris@chris-wilson.co.uk
drivers/gpu/drm/i915/i915_debugfs.c

index fa8ff27..3e4f58f 100644 (file)
@@ -1076,8 +1076,6 @@ static int i915_hangcheck_info(struct seq_file *m, void *unused)
 {
        struct drm_i915_private *dev_priv = node_to_i915(m->private);
        struct intel_engine_cs *engine;
-       u64 acthd[I915_NUM_ENGINES];
-       struct intel_instdone instdone;
        intel_wakeref_t wakeref;
        enum intel_engine_id id;
 
@@ -1092,13 +1090,6 @@ static int i915_hangcheck_info(struct seq_file *m, void *unused)
                return 0;
        }
 
-       with_intel_runtime_pm(&dev_priv->runtime_pm, wakeref) {
-               for_each_engine(engine, dev_priv, id)
-                       acthd[id] = intel_engine_get_active_head(engine);
-
-               intel_engine_get_instdone(dev_priv->engine[RCS0], &instdone);
-       }
-
        if (timer_pending(&dev_priv->gpu_error.hangcheck_work.timer))
                seq_printf(m, "Hangcheck active, timer fires in %dms\n",
                           jiffies_to_msecs(dev_priv->gpu_error.hangcheck_work.timer.expires -
@@ -1110,23 +1101,25 @@ static int i915_hangcheck_info(struct seq_file *m, void *unused)
 
        seq_printf(m, "GT active? %s\n", yesno(dev_priv->gt.awake));
 
-       for_each_engine(engine, dev_priv, id) {
-               seq_printf(m, "%s: %d ms ago\n",
-                          engine->name,
-                          jiffies_to_msecs(jiffies -
-                                           engine->hangcheck.action_timestamp));
+       with_intel_runtime_pm(&dev_priv->runtime_pm, wakeref) {
+               for_each_engine(engine, dev_priv, id) {
+                       struct intel_instdone instdone;
 
-               seq_printf(m, "\tACTHD = 0x%08llx [current 0x%08llx]\n",
-                          (long long)engine->hangcheck.acthd,
-                          (long long)acthd[id]);
+                       seq_printf(m, "%s: %d ms ago\n",
+                                  engine->name,
+                                  jiffies_to_msecs(jiffies -
+                                                   engine->hangcheck.action_timestamp));
 
-               if (engine->id == RCS0) {
-                       seq_puts(m, "\tinstdone read =\n");
+                       seq_printf(m, "\tACTHD = 0x%08llx [current 0x%08llx]\n",
+                                  (long long)engine->hangcheck.acthd,
+                                  intel_engine_get_active_head(engine));
+
+                       intel_engine_get_instdone(engine, &instdone);
 
+                       seq_puts(m, "\tinstdone read =\n");
                        i915_instdone_info(dev_priv, m, &instdone);
 
                        seq_puts(m, "\tinstdone accu =\n");
-
                        i915_instdone_info(dev_priv, m,
                                           &engine->hangcheck.instdone);
                }