Commit f56388f3 authored by Erik Gilling's avatar Erik Gilling Committed by Greg Kroah-Hartman

staging: sync: Dump sync state to console on timeout

If we hit a timeout, dump sync state to console

Cc: Maarten Lankhorst <maarten.lankhorst@canonical.com>
Cc: Erik Gilling <konkers@android.com>
Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
Cc: Rob Clark <robclark@gmail.com>
Cc: Sumit Semwal <sumit.semwal@linaro.org>
Cc: dri-devel@lists.freedesktop.org
Cc: Android Kernel Team <kernel-team@android.com>
Signed-off-by: default avatarErik Gilling <konkers@android.com>
[jstultz: Add commit message, whitespace fixups]
Signed-off-by: default avatarJohn Stultz <john.stultz@linaro.org>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 3b640f5d
...@@ -31,6 +31,7 @@ ...@@ -31,6 +31,7 @@
static void sync_fence_signal_pt(struct sync_pt *pt); static void sync_fence_signal_pt(struct sync_pt *pt);
static int _sync_pt_has_signaled(struct sync_pt *pt); static int _sync_pt_has_signaled(struct sync_pt *pt);
static void sync_fence_free(struct kref *kref); static void sync_fence_free(struct kref *kref);
static void sync_dump(void);
static LIST_HEAD(sync_timeline_list_head); static LIST_HEAD(sync_timeline_list_head);
static DEFINE_SPINLOCK(sync_timeline_list_lock); static DEFINE_SPINLOCK(sync_timeline_list_lock);
...@@ -574,8 +575,10 @@ int sync_fence_wait(struct sync_fence *fence, long timeout) ...@@ -574,8 +575,10 @@ int sync_fence_wait(struct sync_fence *fence, long timeout)
if (fence->status < 0) if (fence->status < 0)
return fence->status; return fence->status;
if (fence->status == 0) if (fence->status == 0) {
sync_dump();
return -ETIME; return -ETIME;
}
return 0; return 0;
} }
...@@ -914,7 +917,34 @@ static __init int sync_debugfs_init(void) ...@@ -914,7 +917,34 @@ static __init int sync_debugfs_init(void)
debugfs_create_file("sync", S_IRUGO, NULL, NULL, &sync_debugfs_fops); debugfs_create_file("sync", S_IRUGO, NULL, NULL, &sync_debugfs_fops);
return 0; return 0;
} }
late_initcall(sync_debugfs_init); late_initcall(sync_debugfs_init);
#define DUMP_CHUNK 256
static char sync_dump_buf[64 * 1024];
void sync_dump(void)
{
struct seq_file s = {
.buf = sync_dump_buf,
.size = sizeof(sync_dump_buf) - 1,
};
int i;
sync_debugfs_show(&s, NULL);
for (i = 0; i < s.count; i += DUMP_CHUNK) {
if ((s.count - i) > DUMP_CHUNK) {
char c = s.buf[i + DUMP_CHUNK];
s.buf[i + DUMP_CHUNK] = 0;
pr_cont("%s", s.buf + i);
s.buf[i + DUMP_CHUNK] = c;
} else {
s.buf[s.count] = 0;
pr_cont("%s", s.buf + i);
}
}
}
#else
static void sync_dump(void)
{
}
#endif #endif
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