drm/i915: Lift i915_request_show()
authorChris Wilson <chris@chris-wilson.co.uk>
Thu, 19 Nov 2020 16:56:12 +0000 (16:56 +0000)
committerChris Wilson <chris@chris-wilson.co.uk>
Thu, 19 Nov 2020 20:31:04 +0000 (20:31 +0000)
Extract i915_request_show for reuse in other request chain pretty
printers.

For a bonus point, quietly change the seqno format from %llx to %lld to
match everywhere else.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20201119165616.10834-2-chris@chris-wilson.co.uk
drivers/gpu/drm/i915/gt/intel_engine_cs.c
drivers/gpu/drm/i915/gt/intel_lrc.c
drivers/gpu/drm/i915/gt/intel_lrc.h
drivers/gpu/drm/i915/i915_request.c
drivers/gpu/drm/i915/i915_request.h

index 1ed84ee..c3bb2e9 100644 (file)
@@ -1294,45 +1294,6 @@ bool intel_engine_can_store_dword(struct intel_engine_cs *engine)
        }
 }
 
-static int print_sched_attr(const struct i915_sched_attr *attr,
-                           char *buf, int x, int len)
-{
-       if (attr->priority == I915_PRIORITY_INVALID)
-               return x;
-
-       x += snprintf(buf + x, len - x,
-                     " prio=%d", attr->priority);
-
-       return x;
-}
-
-static void print_request(struct drm_printer *m,
-                         struct i915_request *rq,
-                         const char *prefix)
-{
-       const char *name = rq->fence.ops->get_timeline_name(&rq->fence);
-       char buf[80] = "";
-       int x = 0;
-
-       x = print_sched_attr(&rq->sched.attr, buf, x, sizeof(buf));
-
-       drm_printf(m, "%s %llx:%llx%s%s %s @ %dms: %s\n",
-                  prefix,
-                  rq->fence.context, rq->fence.seqno,
-                  i915_request_completed(rq) ? "!" :
-                  i915_request_started(rq) ? "*" :
-                  !i915_sw_fence_signaled(&rq->semaphore) ? "&" :
-                  "",
-                  test_bit(DMA_FENCE_FLAG_SIGNALED_BIT,
-                           &rq->fence.flags) ? "+" :
-                  test_bit(DMA_FENCE_FLAG_ENABLE_SIGNAL_BIT,
-                           &rq->fence.flags) ? "-" :
-                  "",
-                  buf,
-                  jiffies_to_msecs(jiffies - rq->emitted_jiffies),
-                  name);
-}
-
 static struct intel_timeline *get_timeline(struct i915_request *rq)
 {
        struct intel_timeline *tl;
@@ -1530,7 +1491,7 @@ static void intel_engine_print_registers(struct intel_engine_cs *engine,
                                        intel_context_is_banned(rq->context) ? "*" : "");
                        len += print_ring(hdr + len, sizeof(hdr) - len, rq);
                        scnprintf(hdr + len, sizeof(hdr) - len, "rq: ");
-                       print_request(m, rq, hdr);
+                       i915_request_show(m, rq, hdr);
                }
                for (port = execlists->pending; (rq = *port); port++) {
                        char hdr[160];
@@ -1544,7 +1505,7 @@ static void intel_engine_print_registers(struct intel_engine_cs *engine,
                                        intel_context_is_banned(rq->context) ? "*" : "");
                        len += print_ring(hdr + len, sizeof(hdr) - len, rq);
                        scnprintf(hdr + len, sizeof(hdr) - len, "rq: ");
-                       print_request(m, rq, hdr);
+                       i915_request_show(m, rq, hdr);
                }
                rcu_read_unlock();
                execlists_active_unlock_bh(execlists);
@@ -1688,7 +1649,7 @@ void intel_engine_dump(struct intel_engine_cs *engine,
        if (rq) {
                struct intel_timeline *tl = get_timeline(rq);
 
-               print_request(m, rq, "\t\tactive ");
+               i915_request_show(m, rq, "\t\tactive ");
 
                drm_printf(m, "\t\tring->start:  0x%08x\n",
                           i915_ggtt_offset(rq->ring->vma));
@@ -1726,7 +1687,7 @@ void intel_engine_dump(struct intel_engine_cs *engine,
                drm_printf(m, "\tDevice is asleep; skipping register dump\n");
        }
 
-       intel_execlists_show_requests(engine, m, print_request, 8);
+       intel_execlists_show_requests(engine, m, i915_request_show, 8);
 
        drm_printf(m, "HWSP:\n");
        hexdump(m, engine->status_page.addr, PAGE_SIZE);
index f7eca93..b6ab116 100644 (file)
@@ -5981,7 +5981,7 @@ int intel_virtual_engine_attach_bond(struct intel_engine_cs *engine,
 void intel_execlists_show_requests(struct intel_engine_cs *engine,
                                   struct drm_printer *m,
                                   void (*show_request)(struct drm_printer *m,
-                                                       struct i915_request *rq,
+                                                       const struct i915_request *rq,
                                                        const char *prefix),
                                   unsigned int max)
 {
index c2d287f..32e6e20 100644 (file)
@@ -106,7 +106,7 @@ void intel_lr_context_reset(struct intel_engine_cs *engine,
 void intel_execlists_show_requests(struct intel_engine_cs *engine,
                                   struct drm_printer *m,
                                   void (*show_request)(struct drm_printer *m,
-                                                       struct i915_request *rq,
+                                                       const struct i915_request *rq,
                                                        const char *prefix),
                                   unsigned int max);
 
index 0e81381..6739917 100644 (file)
@@ -1855,6 +1855,45 @@ out:
        return timeout;
 }
 
+static int print_sched_attr(const struct i915_sched_attr *attr,
+                           char *buf, int x, int len)
+{
+       if (attr->priority == I915_PRIORITY_INVALID)
+               return x;
+
+       x += snprintf(buf + x, len - x,
+                     " prio=%d", attr->priority);
+
+       return x;
+}
+
+void i915_request_show(struct drm_printer *m,
+                      const struct i915_request *rq,
+                      const char *prefix)
+{
+       const char *name = rq->fence.ops->get_timeline_name((struct dma_fence *)&rq->fence);
+       char buf[80] = "";
+       int x = 0;
+
+       x = print_sched_attr(&rq->sched.attr, buf, x, sizeof(buf));
+
+       drm_printf(m, "%s %llx:%lld%s%s %s @ %dms: %s\n",
+                  prefix,
+                  rq->fence.context, rq->fence.seqno,
+                  i915_request_completed(rq) ? "!" :
+                  i915_request_started(rq) ? "*" :
+                  !i915_sw_fence_signaled(&rq->semaphore) ? "&" :
+                  "",
+                  test_bit(DMA_FENCE_FLAG_SIGNALED_BIT,
+                           &rq->fence.flags) ? "+" :
+                  test_bit(DMA_FENCE_FLAG_ENABLE_SIGNAL_BIT,
+                           &rq->fence.flags) ? "-" :
+                  "",
+                  buf,
+                  jiffies_to_msecs(jiffies - rq->emitted_jiffies),
+                  name);
+}
+
 #if IS_ENABLED(CONFIG_DRM_I915_SELFTEST)
 #include "selftests/mock_request.c"
 #include "selftests/i915_request.c"
index 16b7210..0960907 100644 (file)
@@ -43,6 +43,7 @@
 
 struct drm_file;
 struct drm_i915_gem_object;
+struct drm_printer;
 struct i915_request;
 
 struct i915_capture_list {
@@ -369,6 +370,10 @@ long i915_request_wait(struct i915_request *rq,
 #define I915_WAIT_PRIORITY     BIT(1) /* small priority bump for the request */
 #define I915_WAIT_ALL          BIT(2) /* used by i915_gem_object_wait() */
 
+void i915_request_show(struct drm_printer *m,
+                      const struct i915_request *rq,
+                      const char *prefix);
+
 static inline bool i915_request_signaled(const struct i915_request *rq)
 {
        /* The request may live longer than its HWSP, so check flags first! */