| From 66de565bbbc45052fb0f1ebc2415f6d85eea9188 Mon Sep 17 00:00:00 2001 |
| From: Chris Wilson <chris@chris-wilson.co.uk> |
| Date: Wed, 25 Sep 2013 11:43:28 +0100 |
| Subject: drm/i915: Add a tracepoint for using a semaphore |
| MIME-Version: 1.0 |
| Content-Type: text/plain; charset=UTF-8 |
| Content-Transfer-Encoding: 8bit |
| |
| So that we can find the callers who introduce a ring stall. A single |
| ring stall is not too unwelcome, the right issue becomes when they start |
| to interlock and prevent any concurrent work. That, however, is a little |
| tricker to detect with a mere tracepoint! |
| |
| v2: Rebrand it as a ring event, rather than an object event. |
| v3: Include the seqno in the tracepoint for posterity or something. |
| |
| Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> |
| Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com> |
| Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch> |
| (cherry picked from commit b52b89da097896ac265d1f875aeb0bfd92a9dd38) |
| Signed-off-by: Darren Hart <dvhart@linux.intel.com> |
| --- |
| drivers/gpu/drm/i915/i915_gem.c | 1 + |
| drivers/gpu/drm/i915/i915_trace.h | 26 ++++++++++++++++++++++++++ |
| 2 files changed, 27 insertions(+) |
| |
| diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c |
| index f6c8b0ed056c..5ff2338b811b 100644 |
| --- a/drivers/gpu/drm/i915/i915_gem.c |
| +++ b/drivers/gpu/drm/i915/i915_gem.c |
| @@ -2618,6 +2618,7 @@ i915_gem_object_sync(struct drm_i915_gem_object *obj, |
| if (ret) |
| return ret; |
| |
| + trace_i915_gem_ring_sync_to(from, to, seqno); |
| ret = to->sync_to(to, from, seqno); |
| if (!ret) |
| /* We use last_read_seqno because sync_to() |
| diff --git a/drivers/gpu/drm/i915/i915_trace.h b/drivers/gpu/drm/i915/i915_trace.h |
| index daa6fdf4d8ba..6e580c98dede 100644 |
| --- a/drivers/gpu/drm/i915/i915_trace.h |
| +++ b/drivers/gpu/drm/i915/i915_trace.h |
| @@ -248,6 +248,32 @@ TRACE_EVENT(i915_gem_evict_vm, |
| TP_printk("dev=%d, vm=%p", __entry->vm->dev->primary->index, __entry->vm) |
| ); |
| |
| +TRACE_EVENT(i915_gem_ring_sync_to, |
| + TP_PROTO(struct intel_ring_buffer *from, |
| + struct intel_ring_buffer *to, |
| + u32 seqno), |
| + TP_ARGS(from, to, seqno), |
| + |
| + TP_STRUCT__entry( |
| + __field(u32, dev) |
| + __field(u32, sync_from) |
| + __field(u32, sync_to) |
| + __field(u32, seqno) |
| + ), |
| + |
| + TP_fast_assign( |
| + __entry->dev = from->dev->primary->index; |
| + __entry->sync_from = from->id; |
| + __entry->sync_to = to->id; |
| + __entry->seqno = seqno; |
| + ), |
| + |
| + TP_printk("dev=%u, sync-from=%u, sync-to=%u, seqno=%u", |
| + __entry->dev, |
| + __entry->sync_from, __entry->sync_to, |
| + __entry->seqno) |
| +); |
| + |
| TRACE_EVENT(i915_gem_ring_dispatch, |
| TP_PROTO(struct intel_ring_buffer *ring, u32 seqno, u32 flags), |
| TP_ARGS(ring, seqno, flags), |
| -- |
| 1.8.5.rc3 |
| |