mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-08 04:32:20 -04:00
drm/i915: Lift i915_request_show()
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
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -1855,6 +1855,45 @@ long i915_request_wait(struct i915_request *rq,
|
||||
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"
|
||||
|
||||
@@ -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! */
|
||||
|
||||
Reference in New Issue
Block a user