Commit 639f2f24 authored by Venkata Sandeep Dhanalakota's avatar Venkata Sandeep Dhanalakota Committed by Chris Wilson

drm/i915: Introduce new macros for tracing

New macros ENGINE_TRACE(), CE_TRACE(), RQ_TRACE() and
GT_TRACE() are introduce to tag device name and engine
name with contexts and requests tracing in i915.

Cc: Sudeep Dutt <sudeep.dutt@intel.com>
Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
Cc: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Jani Nikula <jani.nikula@intel.com>
Signed-off-by: default avatarVenkata Sandeep Dhanalakota <venkata.s.dhanalakota@intel.com>
Reviewed-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
Link: https://patchwork.freedesktop.org/patch/msgid/20191213155152.69182-2-venkata.s.dhanalakota@intel.com
parent 3dc716fd
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
void i915_gem_suspend(struct drm_i915_private *i915) void i915_gem_suspend(struct drm_i915_private *i915)
{ {
GEM_TRACE("\n"); GEM_TRACE("%s\n", dev_name(i915->drm.dev));
intel_wakeref_auto(&i915->ggtt.userfault_wakeref, 0); intel_wakeref_auto(&i915->ggtt.userfault_wakeref, 0);
flush_workqueue(i915->wq); flush_workqueue(i915->wq);
...@@ -99,7 +99,7 @@ void i915_gem_suspend_late(struct drm_i915_private *i915) ...@@ -99,7 +99,7 @@ void i915_gem_suspend_late(struct drm_i915_private *i915)
void i915_gem_resume(struct drm_i915_private *i915) void i915_gem_resume(struct drm_i915_private *i915)
{ {
GEM_TRACE("\n"); GEM_TRACE("%s\n", dev_name(i915->drm.dev));
intel_uncore_forcewake_get(&i915->uncore, FORCEWAKE_ALL); intel_uncore_forcewake_get(&i915->uncore, FORCEWAKE_ALL);
......
...@@ -68,9 +68,8 @@ int __intel_context_do_pin(struct intel_context *ce) ...@@ -68,9 +68,8 @@ int __intel_context_do_pin(struct intel_context *ce)
if (err) if (err)
goto err; goto err;
GEM_TRACE("%s context:%llx pin ring:{head:%04x, tail:%04x}\n", CE_TRACE(ce, "pin ring:{head:%04x, tail:%04x}\n",
ce->engine->name, ce->timeline->fence_context, ce->ring->head, ce->ring->tail);
ce->ring->head, ce->ring->tail);
i915_gem_context_get(ce->gem_context); /* for ctx->ppgtt */ i915_gem_context_get(ce->gem_context); /* for ctx->ppgtt */
...@@ -98,8 +97,7 @@ void intel_context_unpin(struct intel_context *ce) ...@@ -98,8 +97,7 @@ void intel_context_unpin(struct intel_context *ce)
mutex_lock_nested(&ce->pin_mutex, SINGLE_DEPTH_NESTING); mutex_lock_nested(&ce->pin_mutex, SINGLE_DEPTH_NESTING);
if (likely(atomic_dec_and_test(&ce->pin_count))) { if (likely(atomic_dec_and_test(&ce->pin_count))) {
GEM_TRACE("%s context:%llx retire\n", CE_TRACE(ce, "retire\n");
ce->engine->name, ce->timeline->fence_context);
ce->ops->unpin(ce); ce->ops->unpin(ce);
...@@ -141,8 +139,7 @@ static void __intel_context_retire(struct i915_active *active) ...@@ -141,8 +139,7 @@ static void __intel_context_retire(struct i915_active *active)
{ {
struct intel_context *ce = container_of(active, typeof(*ce), active); struct intel_context *ce = container_of(active, typeof(*ce), active);
GEM_TRACE("%s context:%llx retire\n", CE_TRACE(ce, "retire\n");
ce->engine->name, ce->timeline->fence_context);
set_bit(CONTEXT_VALID_BIT, &ce->flags); set_bit(CONTEXT_VALID_BIT, &ce->flags);
if (ce->state) if (ce->state)
......
...@@ -15,6 +15,13 @@ ...@@ -15,6 +15,13 @@
#include "intel_ring_types.h" #include "intel_ring_types.h"
#include "intel_timeline_types.h" #include "intel_timeline_types.h"
#define CE_TRACE(ce, fmt, ...) do { \
const struct intel_context *ce__ = (ce); \
ENGINE_TRACE(ce__->engine, "context:%llx" fmt, \
ce__->timeline->fence_context, \
##__VA_ARGS__); \
} while (0)
void intel_context_init(struct intel_context *ce, void intel_context_init(struct intel_context *ce,
struct i915_gem_context *ctx, struct i915_gem_context *ctx,
struct intel_engine_cs *engine); struct intel_engine_cs *engine);
......
...@@ -29,6 +29,13 @@ struct intel_gt; ...@@ -29,6 +29,13 @@ struct intel_gt;
#define CACHELINE_BYTES 64 #define CACHELINE_BYTES 64
#define CACHELINE_DWORDS (CACHELINE_BYTES / sizeof(u32)) #define CACHELINE_DWORDS (CACHELINE_BYTES / sizeof(u32))
#define ENGINE_TRACE(e, fmt, ...) do { \
const struct intel_engine_cs *e__ __maybe_unused = (e); \
GEM_TRACE("%s %s: " fmt, \
dev_name(e__->i915->drm.dev), e__->name, \
##__VA_ARGS__); \
} while (0)
/* /*
* The register defines to be used with the following macros need to accept a * The register defines to be used with the following macros need to accept a
* base param, e.g: * base param, e.g:
......
...@@ -912,7 +912,7 @@ int intel_engine_stop_cs(struct intel_engine_cs *engine) ...@@ -912,7 +912,7 @@ int intel_engine_stop_cs(struct intel_engine_cs *engine)
if (INTEL_GEN(engine->i915) < 3) if (INTEL_GEN(engine->i915) < 3)
return -ENODEV; return -ENODEV;
GEM_TRACE("%s\n", engine->name); ENGINE_TRACE(engine, "\n");
intel_uncore_write_fw(uncore, mode, _MASKED_BIT_ENABLE(STOP_RING)); intel_uncore_write_fw(uncore, mode, _MASKED_BIT_ENABLE(STOP_RING));
...@@ -921,7 +921,7 @@ int intel_engine_stop_cs(struct intel_engine_cs *engine) ...@@ -921,7 +921,7 @@ int intel_engine_stop_cs(struct intel_engine_cs *engine)
mode, MODE_IDLE, MODE_IDLE, mode, MODE_IDLE, MODE_IDLE,
1000, stop_timeout(engine), 1000, stop_timeout(engine),
NULL)) { NULL)) {
GEM_TRACE("%s: timed out on STOP_RING -> IDLE\n", engine->name); ENGINE_TRACE(engine, "timed out on STOP_RING -> IDLE\n");
err = -ETIMEDOUT; err = -ETIMEDOUT;
} }
...@@ -933,7 +933,7 @@ int intel_engine_stop_cs(struct intel_engine_cs *engine) ...@@ -933,7 +933,7 @@ int intel_engine_stop_cs(struct intel_engine_cs *engine)
void intel_engine_cancel_stop_cs(struct intel_engine_cs *engine) void intel_engine_cancel_stop_cs(struct intel_engine_cs *engine)
{ {
GEM_TRACE("%s\n", engine->name); ENGINE_TRACE(engine, "\n");
ENGINE_WRITE_FW(engine, RING_MI_MODE, _MASKED_BIT_DISABLE(STOP_RING)); ENGINE_WRITE_FW(engine, RING_MI_MODE, _MASKED_BIT_DISABLE(STOP_RING));
} }
......
...@@ -21,7 +21,7 @@ static int __engine_unpark(struct intel_wakeref *wf) ...@@ -21,7 +21,7 @@ static int __engine_unpark(struct intel_wakeref *wf)
container_of(wf, typeof(*engine), wakeref); container_of(wf, typeof(*engine), wakeref);
void *map; void *map;
GEM_TRACE("%s\n", engine->name); ENGINE_TRACE(engine, "\n");
intel_gt_pm_get(engine->gt); intel_gt_pm_get(engine->gt);
...@@ -80,7 +80,7 @@ __queue_and_release_pm(struct i915_request *rq, ...@@ -80,7 +80,7 @@ __queue_and_release_pm(struct i915_request *rq,
{ {
struct intel_gt_timelines *timelines = &engine->gt->timelines; struct intel_gt_timelines *timelines = &engine->gt->timelines;
GEM_TRACE("%s\n", engine->name); ENGINE_TRACE(engine, "\n");
/* /*
* We have to serialise all potential retirement paths with our * We have to serialise all potential retirement paths with our
...@@ -204,7 +204,7 @@ static int __engine_park(struct intel_wakeref *wf) ...@@ -204,7 +204,7 @@ static int __engine_park(struct intel_wakeref *wf)
if (!switch_to_kernel_context(engine)) if (!switch_to_kernel_context(engine))
return -EBUSY; return -EBUSY;
GEM_TRACE("%s\n", engine->name); ENGINE_TRACE(engine, "\n");
call_idle_barriers(engine); /* cleanup after wedging */ call_idle_barriers(engine); /* cleanup after wedging */
......
...@@ -12,6 +12,12 @@ ...@@ -12,6 +12,12 @@
struct drm_i915_private; struct drm_i915_private;
#define GT_TRACE(gt__, fmt, ...) do { \
typecheck(struct intel_gt, *(gt__)); \
GEM_TRACE("%s " fmt, dev_name(gt->i915->drm.dev), \
##__VA_ARGS__); \
} while (0)
static inline struct intel_gt *uc_to_gt(struct intel_uc *uc) static inline struct intel_gt *uc_to_gt(struct intel_uc *uc)
{ {
return container_of(uc, struct intel_gt, uc); return container_of(uc, struct intel_gt, uc);
......
...@@ -43,7 +43,7 @@ static int __gt_unpark(struct intel_wakeref *wf) ...@@ -43,7 +43,7 @@ static int __gt_unpark(struct intel_wakeref *wf)
struct intel_gt *gt = container_of(wf, typeof(*gt), wakeref); struct intel_gt *gt = container_of(wf, typeof(*gt), wakeref);
struct drm_i915_private *i915 = gt->i915; struct drm_i915_private *i915 = gt->i915;
GEM_TRACE("\n"); GT_TRACE(gt, "\n");
i915_globals_unpark(); i915_globals_unpark();
...@@ -76,7 +76,7 @@ static int __gt_park(struct intel_wakeref *wf) ...@@ -76,7 +76,7 @@ static int __gt_park(struct intel_wakeref *wf)
intel_wakeref_t wakeref = fetch_and_zero(&gt->awake); intel_wakeref_t wakeref = fetch_and_zero(&gt->awake);
struct drm_i915_private *i915 = gt->i915; struct drm_i915_private *i915 = gt->i915;
GEM_TRACE("\n"); GT_TRACE(gt, "\n");
intel_gt_park_requests(gt); intel_gt_park_requests(gt);
...@@ -141,7 +141,7 @@ void intel_gt_sanitize(struct intel_gt *gt, bool force) ...@@ -141,7 +141,7 @@ void intel_gt_sanitize(struct intel_gt *gt, bool force)
enum intel_engine_id id; enum intel_engine_id id;
intel_wakeref_t wakeref; intel_wakeref_t wakeref;
GEM_TRACE("force:%s\n", yesno(force)); GT_TRACE(gt, "force:%s", yesno(force));
/* Use a raw wakeref to avoid calling intel_display_power_get early */ /* Use a raw wakeref to avoid calling intel_display_power_get early */
wakeref = intel_runtime_pm_get(gt->uncore->rpm); wakeref = intel_runtime_pm_get(gt->uncore->rpm);
...@@ -188,7 +188,7 @@ int intel_gt_resume(struct intel_gt *gt) ...@@ -188,7 +188,7 @@ int intel_gt_resume(struct intel_gt *gt)
enum intel_engine_id id; enum intel_engine_id id;
int err = 0; int err = 0;
GEM_TRACE("\n"); GT_TRACE(gt, "\n");
/* /*
* After resume, we may need to poke into the pinned kernel * After resume, we may need to poke into the pinned kernel
...@@ -301,20 +301,19 @@ void intel_gt_suspend_late(struct intel_gt *gt) ...@@ -301,20 +301,19 @@ void intel_gt_suspend_late(struct intel_gt *gt)
intel_gt_sanitize(gt, false); intel_gt_sanitize(gt, false);
GEM_TRACE("\n"); GT_TRACE(gt, "\n");
} }
void intel_gt_runtime_suspend(struct intel_gt *gt) void intel_gt_runtime_suspend(struct intel_gt *gt)
{ {
intel_uc_runtime_suspend(&gt->uc); intel_uc_runtime_suspend(&gt->uc);
GEM_TRACE("\n"); GT_TRACE(gt, "\n");
} }
int intel_gt_runtime_resume(struct intel_gt *gt) int intel_gt_runtime_resume(struct intel_gt *gt)
{ {
GEM_TRACE("\n"); GT_TRACE(gt, "\n");
intel_gt_init_swizzling(gt); intel_gt_init_swizzling(gt);
return intel_uc_runtime_resume(&gt->uc); return intel_uc_runtime_resume(&gt->uc);
......
...@@ -1069,8 +1069,8 @@ static void reset_active(struct i915_request *rq, ...@@ -1069,8 +1069,8 @@ static void reset_active(struct i915_request *rq,
* remain correctly ordered. And we defer to __i915_request_submit() * remain correctly ordered. And we defer to __i915_request_submit()
* so that all asynchronous waits are correctly handled. * so that all asynchronous waits are correctly handled.
*/ */
GEM_TRACE("%s(%s): { rq=%llx:%lld }\n", ENGINE_TRACE(engine, "{ rq=%llx:%lld }\n",
__func__, engine->name, rq->fence.context, rq->fence.seqno); rq->fence.context, rq->fence.seqno);
/* On resubmission of the active request, payload will be scrubbed */ /* On resubmission of the active request, payload will be scrubbed */
if (i915_request_completed(rq)) if (i915_request_completed(rq))
...@@ -1274,15 +1274,14 @@ trace_ports(const struct intel_engine_execlists *execlists, ...@@ -1274,15 +1274,14 @@ trace_ports(const struct intel_engine_execlists *execlists,
if (!ports[0]) if (!ports[0])
return; return;
GEM_TRACE("%s: %s { %llx:%lld%s, %llx:%lld }\n", ENGINE_TRACE(engine, "%s { %llx:%lld%s, %llx:%lld }\n", msg,
engine->name, msg, ports[0]->fence.context,
ports[0]->fence.context, ports[0]->fence.seqno,
ports[0]->fence.seqno, i915_request_completed(ports[0]) ? "!" :
i915_request_completed(ports[0]) ? "!" : i915_request_started(ports[0]) ? "*" :
i915_request_started(ports[0]) ? "*" : "",
"", ports[1] ? ports[1]->fence.context : 0,
ports[1] ? ports[1]->fence.context : 0, ports[1] ? ports[1]->fence.seqno : 0);
ports[1] ? ports[1]->fence.seqno : 0);
} }
static __maybe_unused bool static __maybe_unused bool
...@@ -1700,12 +1699,12 @@ static void execlists_dequeue(struct intel_engine_cs *engine) ...@@ -1700,12 +1699,12 @@ static void execlists_dequeue(struct intel_engine_cs *engine)
last = last_active(execlists); last = last_active(execlists);
if (last) { if (last) {
if (need_preempt(engine, last, rb)) { if (need_preempt(engine, last, rb)) {
GEM_TRACE("%s: preempting last=%llx:%lld, prio=%d, hint=%d\n", ENGINE_TRACE(engine,
engine->name, "preempting last=%llx:%lld, prio=%d, hint=%d\n",
last->fence.context, last->fence.context,
last->fence.seqno, last->fence.seqno,
last->sched.attr.priority, last->sched.attr.priority,
execlists->queue_priority_hint); execlists->queue_priority_hint);
record_preemption(execlists); record_preemption(execlists);
/* /*
...@@ -1735,12 +1734,12 @@ static void execlists_dequeue(struct intel_engine_cs *engine) ...@@ -1735,12 +1734,12 @@ static void execlists_dequeue(struct intel_engine_cs *engine)
last = NULL; last = NULL;
} else if (need_timeslice(engine, last) && } else if (need_timeslice(engine, last) &&
timer_expired(&engine->execlists.timer)) { timer_expired(&engine->execlists.timer)) {
GEM_TRACE("%s: expired last=%llx:%lld, prio=%d, hint=%d\n", ENGINE_TRACE(engine,
engine->name, "expired last=%llx:%lld, prio=%d, hint=%d\n",
last->fence.context, last->fence.context,
last->fence.seqno, last->fence.seqno,
last->sched.attr.priority, last->sched.attr.priority,
execlists->queue_priority_hint); execlists->queue_priority_hint);
ring_set_paused(engine, 1); ring_set_paused(engine, 1);
defer_active(engine); defer_active(engine);
...@@ -1817,14 +1816,14 @@ static void execlists_dequeue(struct intel_engine_cs *engine) ...@@ -1817,14 +1816,14 @@ static void execlists_dequeue(struct intel_engine_cs *engine)
return; /* leave this for another */ return; /* leave this for another */
} }
GEM_TRACE("%s: virtual rq=%llx:%lld%s, new engine? %s\n", ENGINE_TRACE(engine,
engine->name, "virtual rq=%llx:%lld%s, new engine? %s\n",
rq->fence.context, rq->fence.context,
rq->fence.seqno, rq->fence.seqno,
i915_request_completed(rq) ? "!" : i915_request_completed(rq) ? "!" :
i915_request_started(rq) ? "*" : i915_request_started(rq) ? "*" :
"", "",
yesno(engine != ve->siblings[0])); yesno(engine != ve->siblings[0]));
ve->request = NULL; ve->request = NULL;
ve->base.execlists.queue_priority_hint = INT_MIN; ve->base.execlists.queue_priority_hint = INT_MIN;
...@@ -1980,9 +1979,6 @@ static void execlists_dequeue(struct intel_engine_cs *engine) ...@@ -1980,9 +1979,6 @@ static void execlists_dequeue(struct intel_engine_cs *engine)
* interrupt for secondary ports). * interrupt for secondary ports).
*/ */
execlists->queue_priority_hint = queue_prio(execlists); execlists->queue_priority_hint = queue_prio(execlists);
GEM_TRACE("%s: queue_priority_hint:%d, submit:%s\n",
engine->name, execlists->queue_priority_hint,
yesno(submit));
if (submit) { if (submit) {
*port = execlists_schedule_in(last, port - execlists->pending); *port = execlists_schedule_in(last, port - execlists->pending);
...@@ -2131,7 +2127,7 @@ static void process_csb(struct intel_engine_cs *engine) ...@@ -2131,7 +2127,7 @@ static void process_csb(struct intel_engine_cs *engine)
*/ */
head = execlists->csb_head; head = execlists->csb_head;
tail = READ_ONCE(*execlists->csb_write); tail = READ_ONCE(*execlists->csb_write);
GEM_TRACE("%s cs-irq head=%d, tail=%d\n", engine->name, head, tail); ENGINE_TRACE(engine, "cs-irq head=%d, tail=%d\n", head, tail);
if (unlikely(head == tail)) if (unlikely(head == tail))
return; return;
...@@ -2169,9 +2165,8 @@ static void process_csb(struct intel_engine_cs *engine) ...@@ -2169,9 +2165,8 @@ static void process_csb(struct intel_engine_cs *engine)
* status notifier. * status notifier.
*/ */
GEM_TRACE("%s csb[%d]: status=0x%08x:0x%08x\n", ENGINE_TRACE(engine, "csb[%d]: status=0x%08x:0x%08x\n",
engine->name, head, head, buf[2 * head + 0], buf[2 * head + 1]);
buf[2 * head + 0], buf[2 * head + 1]);
if (INTEL_GEN(engine->i915) >= 12) if (INTEL_GEN(engine->i915) >= 12)
promote = gen12_csb_parse(execlists, buf + 2 * head); promote = gen12_csb_parse(execlists, buf + 2 * head);
...@@ -2262,10 +2257,9 @@ static noinline void preempt_reset(struct intel_engine_cs *engine) ...@@ -2262,10 +2257,9 @@ static noinline void preempt_reset(struct intel_engine_cs *engine)
/* Mark this tasklet as disabled to avoid waiting for it to complete */ /* Mark this tasklet as disabled to avoid waiting for it to complete */
tasklet_disable_nosync(&engine->execlists.tasklet); tasklet_disable_nosync(&engine->execlists.tasklet);
GEM_TRACE("%s: preempt timeout %lu+%ums\n", ENGINE_TRACE(engine, "preempt timeout %lu+%ums\n",
engine->name, READ_ONCE(engine->props.preempt_timeout_ms),
READ_ONCE(engine->props.preempt_timeout_ms), jiffies_to_msecs(jiffies - engine->execlists.preempt.expires));
jiffies_to_msecs(jiffies - engine->execlists.preempt.expires));
intel_engine_reset(engine, "preemption time out"); intel_engine_reset(engine, "preemption time out");
tasklet_enable(&engine->execlists.tasklet); tasklet_enable(&engine->execlists.tasklet);
...@@ -2971,8 +2965,8 @@ static void execlists_reset_prepare(struct intel_engine_cs *engine) ...@@ -2971,8 +2965,8 @@ static void execlists_reset_prepare(struct intel_engine_cs *engine)
struct intel_engine_execlists * const execlists = &engine->execlists; struct intel_engine_execlists * const execlists = &engine->execlists;
unsigned long flags; unsigned long flags;
GEM_TRACE("%s: depth<-%d\n", engine->name, ENGINE_TRACE(engine, "depth<-%d\n",
atomic_read(&execlists->tasklet.count)); atomic_read(&execlists->tasklet.count));
/* /*
* Prevent request submission to the hardware until we have * Prevent request submission to the hardware until we have
...@@ -3134,8 +3128,8 @@ static void __execlists_reset(struct intel_engine_cs *engine, bool stalled) ...@@ -3134,8 +3128,8 @@ static void __execlists_reset(struct intel_engine_cs *engine, bool stalled)
restore_default_state(ce, engine); restore_default_state(ce, engine);
out_replay: out_replay:
GEM_TRACE("%s replay {head:%04x, tail:%04x}\n", ENGINE_TRACE(engine, "replay {head:%04x, tail:%04x}\n",
engine->name, ce->ring->head, ce->ring->tail); ce->ring->head, ce->ring->tail);
intel_ring_update_space(ce->ring); intel_ring_update_space(ce->ring);
__execlists_reset_reg_state(ce, engine); __execlists_reset_reg_state(ce, engine);
__execlists_update_reg_state(ce, engine); __execlists_update_reg_state(ce, engine);
...@@ -3151,7 +3145,7 @@ static void execlists_reset(struct intel_engine_cs *engine, bool stalled) ...@@ -3151,7 +3145,7 @@ static void execlists_reset(struct intel_engine_cs *engine, bool stalled)
{ {
unsigned long flags; unsigned long flags;
GEM_TRACE("%s\n", engine->name); ENGINE_TRACE(engine, "\n");
spin_lock_irqsave(&engine->active.lock, flags); spin_lock_irqsave(&engine->active.lock, flags);
...@@ -3172,7 +3166,7 @@ static void execlists_cancel_requests(struct intel_engine_cs *engine) ...@@ -3172,7 +3166,7 @@ static void execlists_cancel_requests(struct intel_engine_cs *engine)
struct rb_node *rb; struct rb_node *rb;
unsigned long flags; unsigned long flags;
GEM_TRACE("%s\n", engine->name); ENGINE_TRACE(engine, "\n");
/* /*
* Before we call engine->cancel_requests(), we should have exclusive * Before we call engine->cancel_requests(), we should have exclusive
...@@ -3259,8 +3253,8 @@ static void execlists_reset_finish(struct intel_engine_cs *engine) ...@@ -3259,8 +3253,8 @@ static void execlists_reset_finish(struct intel_engine_cs *engine)
if (__tasklet_enable(&execlists->tasklet)) if (__tasklet_enable(&execlists->tasklet))
/* And kick in case we missed a new request submission. */ /* And kick in case we missed a new request submission. */
tasklet_hi_schedule(&execlists->tasklet); tasklet_hi_schedule(&execlists->tasklet);
GEM_TRACE("%s: depth->%d\n", engine->name, ENGINE_TRACE(engine, "depth->%d\n",
atomic_read(&execlists->tasklet.count)); atomic_read(&execlists->tasklet.count));
} }
static int gen8_emit_bb_start(struct i915_request *rq, static int gen8_emit_bb_start(struct i915_request *rq,
...@@ -4309,10 +4303,9 @@ static intel_engine_mask_t virtual_submission_mask(struct virtual_engine *ve) ...@@ -4309,10 +4303,9 @@ static intel_engine_mask_t virtual_submission_mask(struct virtual_engine *ve)
mask = ve->siblings[0]->mask; mask = ve->siblings[0]->mask;
} }
GEM_TRACE("%s: rq=%llx:%lld, mask=%x, prio=%d\n", ENGINE_TRACE(&ve->base, "rq=%llx:%lld, mask=%x, prio=%d\n",
ve->base.name, rq->fence.context, rq->fence.seqno,
rq->fence.context, rq->fence.seqno, mask, ve->base.execlists.queue_priority_hint);
mask, ve->base.execlists.queue_priority_hint);
return mask; return mask;
} }
...@@ -4403,10 +4396,9 @@ static void virtual_submit_request(struct i915_request *rq) ...@@ -4403,10 +4396,9 @@ static void virtual_submit_request(struct i915_request *rq)
struct i915_request *old; struct i915_request *old;
unsigned long flags; unsigned long flags;
GEM_TRACE("%s: rq=%llx:%lld\n", ENGINE_TRACE(&ve->base, "rq=%llx:%lld\n",
ve->base.name, rq->fence.context,
rq->fence.context, rq->fence.seqno);
rq->fence.seqno);
GEM_BUG_ON(ve->base.submit_request != virtual_submit_request); GEM_BUG_ON(ve->base.submit_request != virtual_submit_request);
......
...@@ -1089,7 +1089,7 @@ int intel_engine_reset(struct intel_engine_cs *engine, const char *msg) ...@@ -1089,7 +1089,7 @@ int intel_engine_reset(struct intel_engine_cs *engine, const char *msg)
bool uses_guc = intel_engine_in_guc_submission_mode(engine); bool uses_guc = intel_engine_in_guc_submission_mode(engine);
int ret; int ret;
GEM_TRACE("%s flags=%lx\n", engine->name, gt->reset.flags); ENGINE_TRACE(engine, "flags=%lx\n", gt->reset.flags);
GEM_BUG_ON(!test_bit(I915_RESET_ENGINE + engine->id, &gt->reset.flags)); GEM_BUG_ON(!test_bit(I915_RESET_ENGINE + engine->id, &gt->reset.flags));
if (!intel_engine_pm_get_if_awake(engine)) if (!intel_engine_pm_get_if_awake(engine))
......
...@@ -632,8 +632,8 @@ static int xcs_resume(struct intel_engine_cs *engine) ...@@ -632,8 +632,8 @@ static int xcs_resume(struct intel_engine_cs *engine)
struct intel_ring *ring = engine->legacy.ring; struct intel_ring *ring = engine->legacy.ring;
int ret = 0; int ret = 0;
GEM_TRACE("%s: ring:{HEAD:%04x, TAIL:%04x}\n", ENGINE_TRACE(engine, "ring:{HEAD:%04x, TAIL:%04x}\n",
engine->name, ring->head, ring->tail); ring->head, ring->tail);
intel_uncore_forcewake_get(engine->uncore, FORCEWAKE_ALL); intel_uncore_forcewake_get(engine->uncore, FORCEWAKE_ALL);
...@@ -746,10 +746,10 @@ static void reset_prepare(struct intel_engine_cs *engine) ...@@ -746,10 +746,10 @@ static void reset_prepare(struct intel_engine_cs *engine)
* *
* FIXME: Wa for more modern gens needs to be validated * FIXME: Wa for more modern gens needs to be validated
*/ */
GEM_TRACE("%s\n", engine->name); ENGINE_TRACE(engine, "\n");
if (intel_engine_stop_cs(engine)) if (intel_engine_stop_cs(engine))
GEM_TRACE("%s: timed out on STOP_RING\n", engine->name); ENGINE_TRACE(engine, "timed out on STOP_RING\n");
intel_uncore_write_fw(uncore, intel_uncore_write_fw(uncore,
RING_HEAD(base), RING_HEAD(base),
...@@ -765,9 +765,8 @@ static void reset_prepare(struct intel_engine_cs *engine) ...@@ -765,9 +765,8 @@ static void reset_prepare(struct intel_engine_cs *engine)
/* Check acts as a post */ /* Check acts as a post */
if (intel_uncore_read_fw(uncore, RING_HEAD(base))) if (intel_uncore_read_fw(uncore, RING_HEAD(base)))
GEM_TRACE("%s: ring head [%x] not parked\n", ENGINE_TRACE(engine, "ring head [%x] not parked\n",
engine->name, intel_uncore_read_fw(uncore, RING_HEAD(base)));
intel_uncore_read_fw(uncore, RING_HEAD(base)));
} }
static void reset_ring(struct intel_engine_cs *engine, bool stalled) static void reset_ring(struct intel_engine_cs *engine, bool stalled)
......
...@@ -375,7 +375,7 @@ static void guc_reset_prepare(struct intel_engine_cs *engine) ...@@ -375,7 +375,7 @@ static void guc_reset_prepare(struct intel_engine_cs *engine)
{ {
struct intel_engine_execlists * const execlists = &engine->execlists; struct intel_engine_execlists * const execlists = &engine->execlists;
GEM_TRACE("%s\n", engine->name); ENGINE_TRACE(engine, "\n");
/* /*
* Prevent request submission to the hardware until we have * Prevent request submission to the hardware until we have
...@@ -434,7 +434,7 @@ static void guc_cancel_requests(struct intel_engine_cs *engine) ...@@ -434,7 +434,7 @@ static void guc_cancel_requests(struct intel_engine_cs *engine)
struct rb_node *rb; struct rb_node *rb;
unsigned long flags; unsigned long flags;
GEM_TRACE("%s\n", engine->name); ENGINE_TRACE(engine, "\n");
/* /*
* Before we call engine->cancel_requests(), we should have exclusive * Before we call engine->cancel_requests(), we should have exclusive
...@@ -495,8 +495,8 @@ static void guc_reset_finish(struct intel_engine_cs *engine) ...@@ -495,8 +495,8 @@ static void guc_reset_finish(struct intel_engine_cs *engine)
/* And kick in case we missed a new request submission. */ /* And kick in case we missed a new request submission. */
tasklet_hi_schedule(&execlists->tasklet); tasklet_hi_schedule(&execlists->tasklet);
GEM_TRACE("%s: depth->%d\n", engine->name, ENGINE_TRACE(engine, "depth->%d\n",
atomic_read(&execlists->tasklet.count)); atomic_read(&execlists->tasklet.count));
} }
/* /*
......
...@@ -223,10 +223,7 @@ bool i915_request_retire(struct i915_request *rq) ...@@ -223,10 +223,7 @@ bool i915_request_retire(struct i915_request *rq)
if (!i915_request_completed(rq)) if (!i915_request_completed(rq))
return false; return false;
GEM_TRACE("%s fence %llx:%lld, current %d\n", RQ_TRACE(rq, "\n");
rq->engine->name,
rq->fence.context, rq->fence.seqno,
hwsp_seqno(rq));
GEM_BUG_ON(!i915_sw_fence_signaled(&rq->submit)); GEM_BUG_ON(!i915_sw_fence_signaled(&rq->submit));
trace_i915_request_retire(rq); trace_i915_request_retire(rq);
...@@ -287,10 +284,7 @@ void i915_request_retire_upto(struct i915_request *rq) ...@@ -287,10 +284,7 @@ void i915_request_retire_upto(struct i915_request *rq)
struct intel_timeline * const tl = i915_request_timeline(rq); struct intel_timeline * const tl = i915_request_timeline(rq);
struct i915_request *tmp; struct i915_request *tmp;
GEM_TRACE("%s fence %llx:%lld, current %d\n", RQ_TRACE(rq, "\n");
rq->engine->name,
rq->fence.context, rq->fence.seqno,
hwsp_seqno(rq));
GEM_BUG_ON(!i915_request_completed(rq)); GEM_BUG_ON(!i915_request_completed(rq));
...@@ -351,10 +345,7 @@ bool __i915_request_submit(struct i915_request *request) ...@@ -351,10 +345,7 @@ bool __i915_request_submit(struct i915_request *request)
struct intel_engine_cs *engine = request->engine; struct intel_engine_cs *engine = request->engine;
bool result = false; bool result = false;
GEM_TRACE("%s fence %llx:%lld, current %d\n", RQ_TRACE(request, "\n");
engine->name,
request->fence.context, request->fence.seqno,
hwsp_seqno(request));
GEM_BUG_ON(!irqs_disabled()); GEM_BUG_ON(!irqs_disabled());
lockdep_assert_held(&engine->active.lock); lockdep_assert_held(&engine->active.lock);
...@@ -443,10 +434,7 @@ void __i915_request_unsubmit(struct i915_request *request) ...@@ -443,10 +434,7 @@ void __i915_request_unsubmit(struct i915_request *request)
{ {
struct intel_engine_cs *engine = request->engine; struct intel_engine_cs *engine = request->engine;
GEM_TRACE("%s fence %llx:%lld, current %d\n", RQ_TRACE(request, "\n");
engine->name,
request->fence.context, request->fence.seqno,
hwsp_seqno(request));
GEM_BUG_ON(!irqs_disabled()); GEM_BUG_ON(!irqs_disabled());
lockdep_assert_held(&engine->active.lock); lockdep_assert_held(&engine->active.lock);
...@@ -1261,8 +1249,7 @@ struct i915_request *__i915_request_commit(struct i915_request *rq) ...@@ -1261,8 +1249,7 @@ struct i915_request *__i915_request_commit(struct i915_request *rq)
struct intel_ring *ring = rq->ring; struct intel_ring *ring = rq->ring;
u32 *cs; u32 *cs;
GEM_TRACE("%s fence %llx:%lld\n", RQ_TRACE(rq, "\n");
engine->name, rq->fence.context, rq->fence.seqno);
/* /*
* To ensure that this call will not fail, space for its emissions * To ensure that this call will not fail, space for its emissions
......
...@@ -49,6 +49,13 @@ struct i915_capture_list { ...@@ -49,6 +49,13 @@ struct i915_capture_list {
struct i915_vma *vma; struct i915_vma *vma;
}; };
#define RQ_TRACE(rq, fmt, ...) do { \
const struct i915_request *rq__ = (rq); \
ENGINE_TRACE(rq__->engine, "fence %llx:%lld, current %d" fmt, \
rq__->fence.context, rq__->fence.seqno, \
hwsp_seqno(rq__), ##__VA_ARGS__); \
} while (0)
enum { enum {
/* /*
* I915_FENCE_FLAG_ACTIVE - this request is currently submitted to HW. * I915_FENCE_FLAG_ACTIVE - this request is currently submitted to HW.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment