forked from Minki/linux
drm/i915: Move intel_execlists_show_requests() aside
Move the debug pretty printer into a standalone routine prior to extending it in upcoming feature work. 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/20190115212948.10423-1-chris@chris-wilson.co.uk
This commit is contained in:
parent
484d9a844d
commit
0212bdef5a
@ -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);
|
||||
intel_execlists_show_requests(engine, m, print_request, 8);
|
||||
|
||||
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);
|
||||
|
||||
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);
|
||||
|
@ -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
|
||||
|
@ -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_ */
|
||||
|
Loading…
Reference in New Issue
Block a user