Commit 73465f1c authored by Maarten Lankhorst's avatar Maarten Lankhorst Committed by Greg Kroah-Hartman

staging/android/sync: Support sync points created from dma-fences

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.

v4: Corrected patch ownership.
Signed-off-by: default avatarMaarten Lankhorst <maarten.lankhorst@canonical.com>
Signed-off-by: default avatarTvrtko Ursulin <tvrtko.ursulin@intel.com>
Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
Cc: devel@driverdev.osuosl.org
Cc: Riley Andrews <riandrews@android.com>
Cc: Arve Hjønnevåg <arve@android.com>
Reviewed-by: default avatarJesse Barnes <jbarnes@virtuousgeek.org>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent a2df4e33
...@@ -82,36 +82,42 @@ static const char *sync_status_str(int status) ...@@ -82,36 +82,42 @@ static const char *sync_status_str(int status)
return "error"; 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; int status = 1;
struct sync_timeline *parent = sync_pt_parent(pt);
if (fence_is_signaled_locked(&pt->base)) if (fence_is_signaled_locked(pt))
status = pt->base.status; status = pt->status;
seq_printf(s, " %s%spt %s", seq_printf(s, " %s%spt %s",
fence ? parent->name : "", fence && pt->ops->get_timeline_name ?
pt->ops->get_timeline_name(pt) : "",
fence ? "_" : "", fence ? "_" : "",
sync_status_str(status)); sync_status_str(status));
if (status <= 0) { if (status <= 0) {
struct timespec64 ts64 = 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); seq_printf(s, "@%lld.%09ld", (s64)ts64.tv_sec, ts64.tv_nsec);
} }
if (parent->ops->timeline_value_str && if ((!fence || pt->ops->timeline_value_str) &&
parent->ops->pt_value_str) { pt->ops->fence_value_str) {
char value[64]; char value[64];
bool success;
parent->ops->pt_value_str(pt, value, sizeof(value)); pt->ops->fence_value_str(pt, value, sizeof(value));
seq_printf(s, ": %s", value); success = strlen(value);
if (fence) {
parent->ops->timeline_value_str(parent, value, if (success)
sizeof(value)); seq_printf(s, ": %s", value);
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) ...@@ -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) { list_for_each(pos, &obj->child_list_head) {
struct sync_pt *pt = struct sync_pt *pt =
container_of(pos, struct sync_pt, child_list); 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); 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) ...@@ -153,11 +159,7 @@ static void sync_print_fence(struct seq_file *s, struct sync_fence *fence)
sync_status_str(atomic_read(&fence->status))); sync_status_str(atomic_read(&fence->status)));
for (i = 0; i < fence->num_fences; ++i) { for (i = 0; i < fence->num_fences; ++i) {
struct sync_pt *pt = sync_print_pt(s, fence->cbs[i].sync_pt, true);
container_of(fence->cbs[i].sync_pt,
struct sync_pt, base);
sync_print_pt(s, pt, true);
} }
spin_lock_irqsave(&fence->wq.lock, flags); spin_lock_irqsave(&fence->wq.lock, flags);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment