[Intel-gfx] [PATCH 28/39] drm/i915: Move intel_execlists_show_requests() aside
Tvrtko Ursulin
tvrtko.ursulin at linux.intel.com
Wed Jan 2 15:15:22 UTC 2019
On 02/01/2019 09:41, Chris Wilson wrote:
> Move the debug pretty printer into a standalone routine prior to
> extending it in upcoming feature work.
>
> Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
> ---
> 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 59b9349012e3..36177546f68b 100644
> --- a/drivers/gpu/drm/i915/intel_engine_cs.c
> +++ b/drivers/gpu/drm/i915/intel_engine_cs.c
> @@ -1421,15 +1421,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;
> @@ -1493,52 +1490,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);
>
> @@ -1547,8 +1501,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 9bdd7ec12991..bcc5e0d88130 100644
> --- a/drivers/gpu/drm/i915/intel_lrc.c
> +++ b/drivers/gpu/drm/i915/intel_lrc.c
> @@ -2676,6 +2676,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_ */
>
Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin at intel.com>
Regards,
Tvrtko
More information about the Intel-gfx
mailing list