Move the debug pretty printer into a standalone routine prior to
extending it in upcoming feature work.

Signed-off-by: Chris Wilson <[email protected]>
Reviewed-by: Tvrtko Ursulin <[email protected]>
---
 drivers/gpu/drm/i915/intel_engine_cs.c | 55 ++----------------------
 drivers/gpu/drm/i915/intel_lrc.c       | 58 ++++++++++++++++++++++++++
 drivers/gpu/drm/i915/intel_lrc.h       | 10 ++++-
 3 files changed, 71 insertions(+), 52 deletions(-)

diff --git a/drivers/gpu/drm/i915/intel_engine_cs.c 
b/drivers/gpu/drm/i915/intel_engine_cs.c
index bf4dae2649ab..8a3fa4a9f66e 100644
--- a/drivers/gpu/drm/i915/intel_engine_cs.c
+++ b/drivers/gpu/drm/i915/intel_engine_cs.c
@@ -1422,15 +1422,12 @@ void intel_engine_dump(struct intel_engine_cs *engine,
                       struct drm_printer *m,
                       const char *header, ...)
 {
-       const int MAX_REQUESTS_TO_SHOW = 8;
        struct intel_breadcrumbs * const b = &engine->breadcrumbs;
-       const struct intel_engine_execlists * const execlists = 
&engine->execlists;
        struct i915_gpu_error * const error = &engine->i915->gpu_error;
-       struct i915_request *rq, *last;
+       struct i915_request *rq;
        intel_wakeref_t wakeref;
        unsigned long flags;
        struct rb_node *rb;
-       int count;
 
        if (header) {
                va_list ap;
@@ -1494,52 +1491,9 @@ void intel_engine_dump(struct intel_engine_cs *engine,
                drm_printf(m, "\tDevice is asleep; skipping register dump\n");
        }
 
-       local_irq_save(flags);
-       spin_lock(&engine->timeline.lock);
-
-       last = NULL;
-       count = 0;
-       list_for_each_entry(rq, &engine->timeline.requests, link) {
-               if (count++ < MAX_REQUESTS_TO_SHOW - 1)
-                       print_request(m, rq, "\t\tE ");
-               else
-                       last = rq;
-       }
-       if (last) {
-               if (count > MAX_REQUESTS_TO_SHOW) {
-                       drm_printf(m,
-                                  "\t\t...skipping %d executing requests...\n",
-                                  count - MAX_REQUESTS_TO_SHOW);
-               }
-               print_request(m, last, "\t\tE ");
-       }
-
-       last = NULL;
-       count = 0;
-       drm_printf(m, "\t\tQueue priority: %d\n", execlists->queue_priority);
-       for (rb = rb_first_cached(&execlists->queue); rb; rb = rb_next(rb)) {
-               struct i915_priolist *p = rb_entry(rb, typeof(*p), node);
-               int i;
-
-               priolist_for_each_request(rq, p, i) {
-                       if (count++ < MAX_REQUESTS_TO_SHOW - 1)
-                               print_request(m, rq, "\t\tQ ");
-                       else
-                               last = rq;
-               }
-       }
-       if (last) {
-               if (count > MAX_REQUESTS_TO_SHOW) {
-                       drm_printf(m,
-                                  "\t\t...skipping %d queued requests...\n",
-                                  count - MAX_REQUESTS_TO_SHOW);
-               }
-               print_request(m, last, "\t\tQ ");
-       }
-
-       spin_unlock(&engine->timeline.lock);
+       intel_execlists_show_requests(engine, m, print_request, 8);
 
-       spin_lock(&b->rb_lock);
+       spin_lock_irqsave(&b->rb_lock, flags);
        for (rb = rb_first(&b->waiters); rb; rb = rb_next(rb)) {
                struct intel_wait *w = rb_entry(rb, typeof(*w), node);
 
@@ -1548,8 +1502,7 @@ void intel_engine_dump(struct intel_engine_cs *engine,
                           task_state_to_char(w->tsk),
                           w->seqno);
        }
-       spin_unlock(&b->rb_lock);
-       local_irq_restore(flags);
+       spin_unlock_irqrestore(&b->rb_lock, flags);
 
        drm_printf(m, "HWSP:\n");
        hexdump(m, engine->status_page.page_addr, PAGE_SIZE);
diff --git a/drivers/gpu/drm/i915/intel_lrc.c b/drivers/gpu/drm/i915/intel_lrc.c
index 608458b92db3..cdc4d84900ff 100644
--- a/drivers/gpu/drm/i915/intel_lrc.c
+++ b/drivers/gpu/drm/i915/intel_lrc.c
@@ -2702,6 +2702,64 @@ void intel_lr_context_resume(struct drm_i915_private 
*i915)
        }
 }
 
+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 char *prefix),
+                                  unsigned int max)
+{
+       const struct intel_engine_execlists *execlists = &engine->execlists;
+       struct i915_request *rq, *last;
+       unsigned long flags;
+       unsigned int count;
+       struct rb_node *rb;
+
+       spin_lock_irqsave(&engine->timeline.lock, flags);
+
+       last = NULL;
+       count = 0;
+       list_for_each_entry(rq, &engine->timeline.requests, link) {
+               if (count++ < max - 1)
+                       show_request(m, rq, "\t\tE ");
+               else
+                       last = rq;
+       }
+       if (last) {
+               if (count > max) {
+                       drm_printf(m,
+                                  "\t\t...skipping %d executing requests...\n",
+                                  count - max);
+               }
+               show_request(m, last, "\t\tE ");
+       }
+
+       last = NULL;
+       count = 0;
+       drm_printf(m, "\t\tQueue priority: %d\n", execlists->queue_priority);
+       for (rb = rb_first_cached(&execlists->queue); rb; rb = rb_next(rb)) {
+               struct i915_priolist *p = rb_entry(rb, typeof(*p), node);
+               int i;
+
+               priolist_for_each_request(rq, p, i) {
+                       if (count++ < max - 1)
+                               show_request(m, rq, "\t\tQ ");
+                       else
+                               last = rq;
+               }
+       }
+       if (last) {
+               if (count > max) {
+                       drm_printf(m,
+                                  "\t\t...skipping %d queued requests...\n",
+                                  count - max);
+               }
+               show_request(m, last, "\t\tQ ");
+       }
+
+       spin_unlock_irqrestore(&engine->timeline.lock, flags);
+}
+
 #if IS_ENABLED(CONFIG_DRM_I915_SELFTEST)
 #include "selftests/intel_lrc.c"
 #endif
diff --git a/drivers/gpu/drm/i915/intel_lrc.h b/drivers/gpu/drm/i915/intel_lrc.h
index f5a5502ecf70..3d86c27c6b32 100644
--- a/drivers/gpu/drm/i915/intel_lrc.h
+++ b/drivers/gpu/drm/i915/intel_lrc.h
@@ -97,11 +97,19 @@ int logical_xcs_ring_init(struct intel_engine_cs *engine);
  */
 #define LRC_HEADER_PAGES LRC_PPHWSP_PN
 
+struct drm_printer;
+
 struct drm_i915_private;
 struct i915_gem_context;
 
 void intel_lr_context_resume(struct drm_i915_private *dev_priv);
-
 void intel_execlists_set_default_submission(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 char *prefix),
+                                  unsigned int max);
+
 #endif /* _INTEL_LRC_H_ */
-- 
2.20.1

_______________________________________________
Intel-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to