[PATCH v9 5/6] drm/i915: Updated request structure tracing

John.C.Harrison
2016-06-01T17:08:32Z

From: John Harrison <John.C.Harrison@Intel.com>

Added the '_complete' trace event which occurs when a fence/request is
signaled as complete. Also moved the notify event from the IRQ handler
code to inside the notify function itself.

v3: Added the current ring seqno to the notify trace point.

v5: Line wrapping to keep the style checker happy.

v7: Updated to newer nightly (lots of ring -> engine renaming).

For: VIZ-5190
Signed-off-by: John Harrison <John.C.Harrison@Intel.com>
Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
---
drivers/gpu/drm/i915/i915_gem.c | 9 +++++++--
drivers/gpu/drm/i915/i915_irq.c | 1 -
drivers/gpu/drm/i915/i915_trace.h | 14 +++++++++-----
3 files changed, 16 insertions(+), 8 deletions(-)

diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
index 83cf9b0..a8b4887 100644
--- a/drivers/gpu/drm/i915/i915_gem.c
+++ b/drivers/gpu/drm/i915/i915_gem.c
@@ -2928,8 +2928,10 @@ void i915_gem_request_notify(struct intel_engine_cs *engine, bool fence_locked)
unsigned long flags;
u32 seqno;

- if (list_empty(&engine->fence_signal_list))
+ if (list_empty(&engine->fence_signal_list)) {
+ trace_i915_gem_request_notify(engine, 0);
return;
+ }

if (!fence_locked)
spin_lock_irqsave(&engine->fence_lock, flags);
@@ -2937,6 +2939,7 @@ void i915_gem_request_notify(struct intel_engine_cs *engine, bool fence_locked)
if (engine->irq_seqno_barrier)
engine->irq_seqno_barrier(engine);
seqno = engine->get_seqno(engine);
+ trace_i915_gem_request_notify(engine, seqno);

list_for_each_entry_safe(req, req_next, &engine->fence_signal_list, signal_link) {
if (!req->cancelled) {
@@ -2950,8 +2953,10 @@ void i915_gem_request_notify(struct intel_engine_cs *engine, bool fence_locked)
*/
list_del_init(&req->signal_link);

- if (!req->cancelled)
+ if (!req->cancelled) {
fence_signal_locked(&req->fence);
+ trace_i915_gem_request_complete(req);
+ }

if (req->irq_enabled) {
req->engine->irq_put(req->engine);
diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c
index a87a3c5..7a08281 100644
--- a/drivers/gpu/drm/i915/i915_irq.c
+++ b/drivers/gpu/drm/i915/i915_irq.c
@@ -991,7 +991,6 @@ static void notify_ring(struct intel_engine_cs *engine)
if (!intel_engine_initialized(engine))
return;

- trace_i915_gem_request_notify(engine);
engine->user_interrupts++;

queue_work(engine->i915->req_wq, &engine->request_work);
diff --git a/drivers/gpu/drm/i915/i915_trace.h b/drivers/gpu/drm/i915/i915_trace.h
index 6768db0..409a249 100644
--- a/drivers/gpu/drm/i915/i915_trace.h
+++ b/drivers/gpu/drm/i915/i915_trace.h
@@ -546,23 +546,27 @@ DEFINE_EVENT(i915_gem_request, i915_gem_request_add,
);

TRACE_EVENT(i915_gem_request_notify,
- TP_PROTO(struct intel_engine_cs *engine),
- TP_ARGS(engine),
+ TP_PROTO(struct intel_engine_cs *engine, uint32_t seqno),
+ TP_ARGS(engine, seqno),

TP_STRUCT__entry(
__field(u32, dev)
__field(u32, ring)
__field(u32, seqno)
+ __field(bool, is_empty)
),

TP_fast_assign(
__entry->dev = engine->i915->dev->primary->index;
__entry->ring = engine->id;
- __entry->seqno = engine->get_seqno(engine);
+ __entry->seqno = seqno;
+ __entry->is_empty =
+ list_empty(&engine->fence_signal_list);
),

- TP_printk("dev=%u, ring=%u, seqno=%u",
- __entry->dev, __entry->ring, __entry->seqno)
+ TP_printk("dev=%u, ring=%u, seqno=%u, empty=%d",
+ __entry->dev, __entry->ring, __entry->seqno,
+ __entry->is_empty)
);

DEFINE_EVENT(i915_gem_request, i915_gem_request_retire,
--
1.9.1