msm: kgsl: Add timeline traces
Add some traces to make it easier to debug and track timeline behavior. Change-Id: Ic0dedbadbfe623c675616a0d2fdd800b49f14705 Signed-off-by: Jordan Crouse <jcrouse@codeaurora.org> Signed-off-by: Rohan Sethi <rohsethi@codeaurora.org>
This commit is contained in:
@@ -2147,6 +2147,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);
|
||||
|
||||
@@ -904,6 +904,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;
|
||||
|
||||
src += cmd.timelines_size;
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
#include "kgsl_device.h"
|
||||
#include "kgsl_sharedmem.h"
|
||||
#include "kgsl_timeline.h"
|
||||
#include "kgsl_trace.h"
|
||||
|
||||
struct kgsl_timeline_fence {
|
||||
struct dma_fence base;
|
||||
@@ -100,6 +101,8 @@ void kgsl_timeline_destroy(struct kref *kref)
|
||||
|
||||
WARN_ON(!list_empty(&timeline->fences));
|
||||
|
||||
trace_kgsl_timeline_destroy(timeline->id);
|
||||
|
||||
kfree(timeline);
|
||||
}
|
||||
|
||||
@@ -145,6 +148,8 @@ static struct kgsl_timeline *kgsl_timeline_alloc(
|
||||
snprintf((char *) timeline->name, sizeof(timeline->name),
|
||||
"kgsl-sw-timeline-%d", id);
|
||||
|
||||
trace_kgsl_timeline_alloc(id, initial);
|
||||
|
||||
spin_lock_init(&timeline->lock);
|
||||
spin_lock_init(&timeline->fence_lock);
|
||||
|
||||
@@ -177,6 +182,8 @@ static void timeline_fence_release(struct dma_fence *fence)
|
||||
}
|
||||
spin_unlock_irqrestore(&timeline->fence_lock, flags);
|
||||
|
||||
trace_kgsl_timeline_fence_release(f->timeline->id, fence->seqno);
|
||||
|
||||
kgsl_timeline_put(f->timeline);
|
||||
dma_fence_free(fence);
|
||||
}
|
||||
@@ -258,6 +265,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;
|
||||
|
||||
spin_lock(&timeline->fence_lock);
|
||||
@@ -307,6 +316,7 @@ struct dma_fence *kgsl_timeline_fence_alloc(struct kgsl_timeline *timeline,
|
||||
if (!dma_fence_is_signaled_locked(&fence->base))
|
||||
kgsl_timeline_add_fence(timeline, fence);
|
||||
|
||||
trace_kgsl_timeline_fence_alloc(timeline->id, seqno);
|
||||
spin_unlock_irq(&timeline->lock);
|
||||
|
||||
return &fence->base;
|
||||
@@ -378,6 +388,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;
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||
/*
|
||||
* Copyright (c) 2011-2020, The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2011-2021, The Linux Foundation. All rights reserved.
|
||||
*/
|
||||
|
||||
#if !defined(_KGSL_TRACE_H) || defined(TRACE_HEADER_MULTI_READ)
|
||||
@@ -1292,6 +1292,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 */
|
||||
|
||||
Reference in New Issue
Block a user