Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 70461f8b authored by Jordan Crouse's avatar Jordan Crouse
Browse files

msm: kgsl: Add timeline traces



Add some traces to make it easier to debug and track timeline behavior.

Change-Id: Ic0dedbadbfe623c675616a0d2fdd800b49f14705
Signed-off-by: default avatarJordan Crouse <jcrouse@codeaurora.org>
parent 36b196ce
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -1904,6 +1904,9 @@ long kgsl_ioctl_gpu_aux_command(struct kgsl_device_private *dev_priv,
		return -ENOMEM;
	}

	trace_kgsl_aux_command(context->id, param->numcmds, param->flags,
		param->timestamp);

	if (param->flags & KGSL_GPU_AUX_COMMAND_SYNC) {
		struct kgsl_drawobj_sync *syncobj =
			kgsl_drawobj_sync_create(device, context);
+1 −0
Original line number Diff line number Diff line
@@ -910,6 +910,7 @@ int kgsl_drawobj_add_timeline(struct kgsl_device_private *dev_priv,
			goto err;
		}

		trace_kgsl_drawobj_timeline(val.timeline, val.seqno);
		timelineobj->timelines[i].seqno = val.seqno;
	}

+13 −0
Original line number Diff line number Diff line
@@ -13,6 +13,7 @@
#include "kgsl_device.h"
#include "kgsl_sharedmem.h"
#include "kgsl_timeline.h"
#include "kgsl_trace.h"

static DEFINE_SPINLOCK(fence_lock);

@@ -102,6 +103,8 @@ void kgsl_timeline_destroy(struct kref *kref)

	WARN_ON(!list_empty(&timeline->fences));

	trace_kgsl_timeline_destroy(timeline->id);

	kfree(timeline);
}

@@ -142,6 +145,8 @@ static struct kgsl_timeline *kgsl_timeline_alloc(struct kgsl_device *device,
	snprintf((char *) timeline->name, sizeof(timeline->name),
		"kgsl-sw-timeline-%d", id);

	trace_kgsl_timeline_alloc(id, initial);

	spin_lock_init(&timeline->lock);

	kref_init(&timeline->ref);
@@ -173,6 +178,8 @@ static void timeline_fence_release(struct dma_fence *fence)
	}
	spin_unlock_irqrestore(&fence_lock, flags);

	trace_kgsl_timeline_fence_release(f->timeline->id, fence->seqno);

	kgsl_timeline_put(f->timeline);
	dma_fence_free(fence);
}
@@ -245,6 +252,8 @@ void kgsl_timeline_signal(struct kgsl_timeline *timeline, u64 seqno)
	if (seqno < timeline->value)
		goto unlock;

	trace_kgsl_timeline_signal(timeline->id, seqno);

	timeline->value = seqno;

	/* Copy the list out so we can walk it without holding the lock */
@@ -288,6 +297,8 @@ struct dma_fence *kgsl_timeline_fence_alloc(struct kgsl_timeline *timeline,
	if (!dma_fence_is_signaled(&fence->base))
		kgsl_timeline_add_fence(timeline, fence);

	trace_kgsl_timeline_fence_alloc(timeline->id, seqno);

	return &fence->base;
}

@@ -345,6 +356,8 @@ long kgsl_ioctl_timeline_wait(struct kgsl_device_private *dev_priv,
		timeout = msecs_to_jiffies(ktime_to_ms(time));
	}

	trace_kgsl_timeline_wait(param->flags, param->tv_sec, param->tv_nsec);

	/* secs.nsecs to jiffies */
	if (!timeout)
		ret = dma_fence_is_signaled(fence) ? 0 : -EBUSY;
+177 −0
Original line number Diff line number Diff line
@@ -1159,6 +1159,183 @@ TRACE_EVENT(kgsl_opp_notify,
		__entry->min_freq, __entry->max_freq
	)
);

TRACE_EVENT(kgsl_timeline_alloc,
	TP_PROTO(
		u32 id,
		u64 seqno
	),
	TP_ARGS(
		id,
		seqno
	),
	TP_STRUCT__entry(
		__field(u32, id)
		__field(u64, seqno)
	),
	TP_fast_assign(
		__entry->id = id;
		__entry->seqno = seqno;
	),
	TP_printk("id=%u initial=%llu",
		__entry->id, __entry->seqno
	)
);

TRACE_EVENT(kgsl_timeline_destroy,
	TP_PROTO(
		u32 id
	),
	TP_ARGS(
		id
	),
	TP_STRUCT__entry(
		__field(u32, id)
	),
	TP_fast_assign(
		__entry->id = id;
	),
	TP_printk("id=%u",
		__entry->id
	)
);


TRACE_EVENT(kgsl_timeline_signal,
	TP_PROTO(
		u32 id,
		u64 seqno
	),
	TP_ARGS(
		id,
		seqno
	),
	TP_STRUCT__entry(
		__field(u32, id)
		__field(u64, seqno)
	),
	TP_fast_assign(
		__entry->id = id;
		__entry->seqno = seqno;
	),
	TP_printk("id=%u seqno=%llu",
		__entry->id, __entry->seqno
	)
);

TRACE_EVENT(kgsl_timeline_fence_alloc,
	TP_PROTO(
		u32 timeline,
		u64 seqno
	),
	TP_ARGS(
		timeline,
		seqno
	),
	TP_STRUCT__entry(
		__field(u32, timeline)
		__field(u64, seqno)
	),
	TP_fast_assign(
		__entry->timeline = timeline;
		__entry->seqno = seqno;
	),
	TP_printk("timeline=%u seqno=%llu",
		__entry->timeline, __entry->seqno
	)
);

TRACE_EVENT(kgsl_timeline_fence_release,
	TP_PROTO(
		u32 timeline,
		u64 seqno
	),
	TP_ARGS(
		timeline,
		seqno
	),
	TP_STRUCT__entry(
		__field(u32, timeline)
		__field(u64, seqno)
	),
	TP_fast_assign(
		__entry->timeline = timeline;
		__entry->seqno = seqno;
	),
	TP_printk("timeline=%u seqno=%llu",
		__entry->timeline, __entry->seqno
	)
);


TRACE_EVENT(kgsl_timeline_wait,
	TP_PROTO(
		u32 flags,
		s64 tv_sec,
		s64 tv_nsec
	),
	TP_ARGS(
		flags,
		tv_sec,
		tv_nsec
	),
	TP_STRUCT__entry(
		__field(u32, flags)
		__field(s64, tv_sec)
		__field(s64, tv_nsec)
	),
	TP_fast_assign(
		__entry->flags = flags;
		__entry->tv_sec = tv_sec;
		__entry->tv_nsec = tv_nsec;
	),
	TP_printk("flags=0x%x tv_sec=%llu tv_nsec=%llu",
		__entry->flags, __entry->tv_sec, __entry->tv_nsec

	)
);

TRACE_EVENT(kgsl_aux_command,
	TP_PROTO(u32 drawctxt_id, u32 numcmds, u32 flags, u32 timestamp
	),
	TP_ARGS(drawctxt_id, numcmds, flags, timestamp
	),
	TP_STRUCT__entry(
		__field(u32, drawctxt_id)
		__field(u32, numcmds)
		__field(u32, flags)
		__field(u32, timestamp)
	),
	TP_fast_assign(
		__entry->drawctxt_id = drawctxt_id;
		__entry->numcmds = numcmds;
		__entry->flags = flags;
		__entry->timestamp = timestamp;
	),
	TP_printk("context=%u numcmds=%u flags=0x%x timestamp=%u",
		__entry->drawctxt_id, __entry->numcmds, __entry->flags,
		__entry->timestamp
	)
);

TRACE_EVENT(kgsl_drawobj_timeline,
	TP_PROTO(u32 timeline, u64 seqno
	),
	TP_ARGS(timeline, seqno
	),
	TP_STRUCT__entry(
		__field(u32, timeline)
		__field(u64, seqno)
	),
	TP_fast_assign(
		__entry->timeline = timeline;
		__entry->seqno = seqno;
	),
	TP_printk("timeline=%u seqno=%llu",
		__entry->timeline, __entry->seqno
	)
);

#endif /* _KGSL_TRACE_H */

/* This part must be outside protection */