drm/amdgpu: Add job pipe sync dependecy trace
authorAndrey Grodzovsky <andrey.grodzovsky@amd.com>
Tue, 31 Jul 2018 14:52:25 +0000 (10:52 -0400)
committerAlex Deucher <alexander.deucher@amd.com>
Mon, 27 Aug 2018 16:09:47 +0000 (11:09 -0500)
It's useful to trace any dependency a job has on prevoius
jobs.

Signed-off-by: Andrey Grodzovsky <andrey.grodzovsky@amd.com>
Reviewed-by: Christian König <christian.koenig@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c
drivers/gpu/drm/amd/amdgpu/amdgpu_trace.h

index 51b5e977ca885ef1f7d7df49698f3c6843bab437..47817e00f54f54c8ec04ff786b25ec3b5504eda9 100644 (file)
@@ -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)
 
@@ -170,6 +171,10 @@ int amdgpu_ib_schedule(struct amdgpu_ring *ring, unsigned num_ibs,
             (amdgpu_sriov_vf(adev) && need_ctx_switch) ||
             amdgpu_vm_need_pipeline_sync(ring, job))) {
                need_pipe_sync = true;
+
+               if (tmp)
+                       trace_amdgpu_ib_pipe_sync(job, tmp);
+
                dma_fence_put(tmp);
        }
 
index 7206a0025b17a1ded6fbe7003dc72396653e62d3..8c2dab20eb36740552080c2065ee3e1476622f76 100644 (file)
@@ -462,6 +462,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