Commit 7f60c4b9 authored by Qiang Yu's avatar Qiang Yu
Browse files

drm/lima: add trace point for tasks



track lima task start which can be combined with
dma_fence_signal to identify task execution time.

example command to record:

trace-cmd record -i \
  -e "lima:lima_task_submit" -e "lima:lima_task_run" \
  -e "*fence:*fence_signaled" -e "drm:drm_vblank_event" \
  -e "drm:drm_vblank_event_queued" sleep 4

Reviewed-by: default avatarVasily Khoruzhick <anarsoul@gmail.com>
Signed-off-by: default avatarQiang Yu <yuq825@gmail.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20200307135438.9981-1-yuq825@gmail.com
parent 57b517ce
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -14,6 +14,7 @@ lima-y := \
	lima_sched.o \
	lima_ctx.o \
	lima_dlbu.o \
	lima_bcast.o
	lima_bcast.o \
	lima_trace.o

obj-$(CONFIG_DRM_LIMA) += lima.o
+4 −1
Original line number Diff line number Diff line
@@ -3,7 +3,6 @@

#include <linux/kthread.h>
#include <linux/slab.h>
#include <linux/xarray.h>
#include <linux/vmalloc.h>

#include "lima_drv.h"
@@ -12,6 +11,7 @@
#include "lima_mmu.h"
#include "lima_l2_cache.h"
#include "lima_gem.h"
#include "lima_trace.h"

struct lima_fence {
	struct dma_fence base;
@@ -177,6 +177,7 @@ struct dma_fence *lima_sched_context_queue_task(struct lima_sched_context *conte
{
	struct dma_fence *fence = dma_fence_get(&task->base.s_fence->finished);

	trace_lima_task_submit(task);
	drm_sched_entity_push_job(&task->base, &context->base);
	return fence;
}
@@ -251,6 +252,8 @@ static struct dma_fence *lima_sched_run_job(struct drm_sched_job *job)
	if (last_vm)
		lima_vm_put(last_vm);

	trace_lima_task_run(task);

	pipe->error = false;
	pipe->task_run(pipe, task);

+1 −0
Original line number Diff line number Diff line
@@ -6,6 +6,7 @@

#include <drm/gpu_scheduler.h>
#include <linux/list.h>
#include <linux/xarray.h>

struct lima_vm;

+7 −0
Original line number Diff line number Diff line
// SPDX-License-Identifier: GPL-2.0 OR MIT
/* Copyright 2020 Qiang Yu <yuq825@gmail.com> */

#include "lima_sched.h"

#define CREATE_TRACE_POINTS
#include "lima_trace.h"
+50 −0
Original line number Diff line number Diff line
/* SPDX-License-Identifier: GPL-2.0 OR MIT */
/* Copyright 2020 Qiang Yu <yuq825@gmail.com> */

#if !defined(_LIMA_TRACE_H) || defined(TRACE_HEADER_MULTI_READ)
#define _LIMA_TRACE_H_

#include <linux/tracepoint.h>

#undef TRACE_SYSTEM
#define TRACE_SYSTEM lima
#define TRACE_INCLUDE_FILE lima_trace

DECLARE_EVENT_CLASS(lima_task,
	TP_PROTO(struct lima_sched_task *task),
	TP_ARGS(task),
	TP_STRUCT__entry(
		__field(uint64_t, task_id)
		__field(unsigned int, context)
		__field(unsigned int, seqno)
		__string(pipe, task->base.sched->name)
		),

	TP_fast_assign(
		__entry->task_id = task->base.id;
		__entry->context = task->base.s_fence->finished.context;
		__entry->seqno = task->base.s_fence->finished.seqno;
		__assign_str(pipe, task->base.sched->name)
		),

	TP_printk("task=%llu, context=%u seqno=%u pipe=%s",
		  __entry->task_id, __entry->context, __entry->seqno,
		  __get_str(pipe))
);

DEFINE_EVENT(lima_task, lima_task_submit,
	     TP_PROTO(struct lima_sched_task *task),
	     TP_ARGS(task)
);

DEFINE_EVENT(lima_task, lima_task_run,
	     TP_PROTO(struct lima_sched_task *task),
	     TP_ARGS(task)
);

#endif

/* This part must be outside protection */
#undef TRACE_INCLUDE_PATH
#define TRACE_INCLUDE_PATH ../../drivers/gpu/drm/lima
#include <trace/define_trace.h>