It's useful to trace any dependency a job has on prevoius
jobs.

Signed-off-by: Andrey Grodzovsky <[email protected]>
---
 drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c    |  5 +++++
 drivers/gpu/drm/amd/amdgpu/amdgpu_trace.h | 24 ++++++++++++++++++++++++
 2 files changed, 29 insertions(+)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c
index 5518e62..5c22cfd 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c
@@ -32,6 +32,7 @@
 #include <drm/amdgpu_drm.h>
 #include "amdgpu.h"
 #include "atom.h"
+#include "amdgpu_trace.h"
 
 #define AMDGPU_IB_TEST_TIMEOUT msecs_to_jiffies(1000)
 
@@ -168,6 +169,10 @@ int amdgpu_ib_schedule(struct amdgpu_ring *ring, unsigned 
num_ibs,
            ((tmp = amdgpu_sync_get_fence(&job->sched_sync, NULL)) ||
             amdgpu_vm_need_pipeline_sync(ring, job))) {
                need_pipe_sync = true;
+
+               if (tmp)
+                       trace_amdgpu_ib_pipe_sync(job, tmp);
+
                dma_fence_put(tmp);
        }
 
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_trace.h 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_trace.h
index 11f262f..3cffe53 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_trace.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_trace.h
@@ -457,6 +457,30 @@ TRACE_EVENT(amdgpu_bo_move,
                        __entry->new_placement, __entry->bo_size)
 );
 
+TRACE_EVENT(amdgpu_ib_pipe_sync,
+           TP_PROTO(struct amdgpu_job *sched_job, struct dma_fence *fence),
+           TP_ARGS(sched_job, fence),
+           TP_STRUCT__entry(
+                            __field(const char *,name)
+                            __field(uint64_t, id)
+                            __field(struct dma_fence *, fence)
+                            __field(uint64_t, ctx)
+                            __field(unsigned, seqno)
+                            ),
+
+           TP_fast_assign(
+                          __entry->name = sched_job->base.sched->name;
+                          __entry->id = sched_job->base.id;
+                          __entry->fence = fence;
+                          __entry->ctx = fence->context;
+                          __entry->seqno = fence->seqno;
+                          ),
+           TP_printk("job ring=%s, id=%llu, need pipe sync to fence=%p, 
context=%llu, seq=%u",
+                     __entry->name, __entry->id,
+                     __entry->fence, __entry->ctx,
+                     __entry->seqno)
+);
+
 #undef AMDGPU_JOB_GET_TIMELINE_NAME
 #endif
 
-- 
2.7.4

_______________________________________________
dri-devel mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/dri-devel

Reply via email to