[Intel-gfx] [RFC 01/12] staging/android/sync: Support sync points created from dma-fences
Tvrtko Ursulin
tvrtko.ursulin at linux.intel.com
Mon Nov 23 05:31:36 PST 2015
Hi,
On 23/11/15 11:34, John.C.Harrison at Intel.com wrote:
> From: Tvrtko Ursulin <tvrtko.ursulin at intel.com>
This is actually Maarten's patch, I guess authorship got lost over time
moving through different trees.
Tvrtko
> Debug output assumes all sync points are built on top of Android sync points
> and when we start creating them from dma-fences will NULL ptr deref unless
> taught about this.
>
> Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin at intel.com>
> Cc: Maarten Lankhorst <maarten.lankhorst at linux.intel.com>
> Cc: devel at driverdev.osuosl.org
> Cc: Riley Andrews <riandrews at android.com>
> Cc: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
> Cc: Arve Hjønnevåg <arve at android.com>
> ---
> drivers/staging/android/sync_debug.c | 42 +++++++++++++++++++-----------------
> 1 file changed, 22 insertions(+), 20 deletions(-)
>
> diff --git a/drivers/staging/android/sync_debug.c b/drivers/staging/android/sync_debug.c
> index 91ed2c4..f45d13c 100644
> --- a/drivers/staging/android/sync_debug.c
> +++ b/drivers/staging/android/sync_debug.c
> @@ -82,36 +82,42 @@ static const char *sync_status_str(int status)
> return "error";
> }
>
> -static void sync_print_pt(struct seq_file *s, struct sync_pt *pt, bool fence)
> +static void sync_print_pt(struct seq_file *s, struct fence *pt, bool fence)
> {
> int status = 1;
> - struct sync_timeline *parent = sync_pt_parent(pt);
>
> - if (fence_is_signaled_locked(&pt->base))
> - status = pt->base.status;
> + if (fence_is_signaled_locked(pt))
> + status = pt->status;
>
> seq_printf(s, " %s%spt %s",
> - fence ? parent->name : "",
> + fence && pt->ops->get_timeline_name ?
> + pt->ops->get_timeline_name(pt) : "",
> fence ? "_" : "",
> sync_status_str(status));
>
> if (status <= 0) {
> struct timespec64 ts64 =
> - ktime_to_timespec64(pt->base.timestamp);
> + ktime_to_timespec64(pt->timestamp);
>
> seq_printf(s, "@%lld.%09ld", (s64)ts64.tv_sec, ts64.tv_nsec);
> }
>
> - if (parent->ops->timeline_value_str &&
> - parent->ops->pt_value_str) {
> + if ((!fence || pt->ops->timeline_value_str) &&
> + pt->ops->fence_value_str) {
> char value[64];
> + bool success;
>
> - parent->ops->pt_value_str(pt, value, sizeof(value));
> - seq_printf(s, ": %s", value);
> - if (fence) {
> - parent->ops->timeline_value_str(parent, value,
> - sizeof(value));
> - seq_printf(s, " / %s", value);
> + pt->ops->fence_value_str(pt, value, sizeof(value));
> + success = strlen(value);
> +
> + if (success)
> + seq_printf(s, ": %s", value);
> +
> + if (success && fence) {
> + pt->ops->timeline_value_str(pt, value, sizeof(value));
> +
> + if (strlen(value))
> + seq_printf(s, " / %s", value);
> }
> }
>
> @@ -138,7 +144,7 @@ static void sync_print_obj(struct seq_file *s, struct sync_timeline *obj)
> list_for_each(pos, &obj->child_list_head) {
> struct sync_pt *pt =
> container_of(pos, struct sync_pt, child_list);
> - sync_print_pt(s, pt, false);
> + sync_print_pt(s, &pt->base, false);
> }
> spin_unlock_irqrestore(&obj->child_list_lock, flags);
> }
> @@ -153,11 +159,7 @@ static void sync_print_fence(struct seq_file *s, struct sync_fence *fence)
> sync_status_str(atomic_read(&fence->status)));
>
> for (i = 0; i < fence->num_fences; ++i) {
> - struct sync_pt *pt =
> - container_of(fence->cbs[i].sync_pt,
> - struct sync_pt, base);
> -
> - sync_print_pt(s, pt, true);
> + sync_print_pt(s, fence->cbs[i].sync_pt, true);
> }
>
> spin_lock_irqsave(&fence->wq.lock, flags);
>
More information about the Intel-gfx
mailing list