drm/v3d: Create tracepoints to track the CPU job
authorMaíra Canal <mcanal@igalia.com>
Thu, 30 Nov 2023 16:40:32 +0000 (13:40 -0300)
committerMaíra Canal <mcanal@igalia.com>
Fri, 1 Dec 2023 12:37:48 +0000 (09:37 -0300)
Create tracepoints to track the three major events of a CPU job
lifetime:
1. Submission of a `v3d_submit_cpu` IOCTL
2. Beginning of the execution of a CPU job
3. Ending of the execution of a CPU job

Signed-off-by: Maíra Canal <mcanal@igalia.com>
Reviewed-by: Iago Toral Quiroga <itoral@igalia.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20231130164420.932823-11-mcanal@igalia.com
drivers/gpu/drm/v3d/v3d_sched.c
drivers/gpu/drm/v3d/v3d_submit.c
drivers/gpu/drm/v3d/v3d_trace.h

index c89e92fc614cf52518ad562f2ef2f3bd6398ed23..ebbd00840a73c27ef19d1633a5791a9f94ea2e23 100644 (file)
@@ -288,8 +288,12 @@ v3d_cpu_job_run(struct drm_sched_job *sched_job)
        file->start_ns[V3D_CPU] = local_clock();
        v3d->queue[V3D_CPU].start_ns = file->start_ns[V3D_CPU];
 
+       trace_v3d_cpu_job_begin(&v3d->drm, job->job_type);
+
        cpu_job_function[job->job_type](job);
 
+       trace_v3d_cpu_job_end(&v3d->drm, job->job_type);
+
        runtime = local_clock() - file->start_ns[V3D_CPU];
 
        file->enabled_ns[V3D_CPU] += runtime;
index 124935547f179d542a6250b0139399c687b12add..c134b113b1812e524f2ab9322ab54af3a51f0ac0 100644 (file)
@@ -824,6 +824,8 @@ v3d_submit_cpu_ioctl(struct drm_device *dev, void *data,
                goto fail;
        }
 
+       trace_v3d_submit_cpu_ioctl(&v3d->drm, cpu_job->job_type);
+
        ret = v3d_job_init(v3d, file_priv, &cpu_job->base,
                           v3d_job_free, 0, &se, V3D_CPU);
        if (ret)
index 7aa8dc356e54c2226991f4534f37b3f29ff3c721..5917b94148f5a2425b3d6ad2babcfe2d6458750a 100644 (file)
@@ -225,6 +225,63 @@ TRACE_EVENT(v3d_submit_csd,
                      __entry->seqno)
 );
 
+TRACE_EVENT(v3d_submit_cpu_ioctl,
+           TP_PROTO(struct drm_device *dev, enum v3d_cpu_job_type job_type),
+           TP_ARGS(dev, job_type),
+
+           TP_STRUCT__entry(
+                            __field(u32, dev)
+                            __field(enum v3d_cpu_job_type, job_type)
+                            ),
+
+           TP_fast_assign(
+                          __entry->dev = dev->primary->index;
+                          __entry->job_type = job_type;
+                          ),
+
+           TP_printk("dev=%u, job_type=%d",
+                     __entry->dev,
+                     __entry->job_type)
+);
+
+TRACE_EVENT(v3d_cpu_job_begin,
+           TP_PROTO(struct drm_device *dev, enum v3d_cpu_job_type job_type),
+           TP_ARGS(dev, job_type),
+
+           TP_STRUCT__entry(
+                            __field(u32, dev)
+                            __field(enum v3d_cpu_job_type, job_type)
+                            ),
+
+           TP_fast_assign(
+                          __entry->dev = dev->primary->index;
+                          __entry->job_type = job_type;
+                          ),
+
+           TP_printk("dev=%u, job_type=%d",
+                     __entry->dev,
+                     __entry->job_type)
+);
+
+TRACE_EVENT(v3d_cpu_job_end,
+           TP_PROTO(struct drm_device *dev, enum v3d_cpu_job_type job_type),
+           TP_ARGS(dev, job_type),
+
+           TP_STRUCT__entry(
+                            __field(u32, dev)
+                            __field(enum v3d_cpu_job_type, job_type)
+                            ),
+
+           TP_fast_assign(
+                          __entry->dev = dev->primary->index;
+                          __entry->job_type = job_type;
+                          ),
+
+           TP_printk("dev=%u, job_type=%d",
+                     __entry->dev,
+                     __entry->job_type)
+);
+
 TRACE_EVENT(v3d_cache_clean_begin,
            TP_PROTO(struct drm_device *dev),
            TP_ARGS(dev),