Release 4.10 drivers/dma-buf/sync_debug.c
/*
* Sync File validation framework and debug information
*
* Copyright (C) 2012 Google, Inc.
*
* This software is licensed under the terms of the GNU General Public
* License version 2, as published by the Free Software Foundation, and
* may be copied, distributed, and modified under those terms.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
*/
#include <linux/debugfs.h>
#include "sync_debug.h"
static struct dentry *dbgfs;
static LIST_HEAD(sync_timeline_list_head);
static DEFINE_SPINLOCK(sync_timeline_list_lock);
static LIST_HEAD(sync_file_list_head);
static DEFINE_SPINLOCK(sync_file_list_lock);
void sync_timeline_debug_add(struct sync_timeline *obj)
{
unsigned long flags;
spin_lock_irqsave(&sync_timeline_list_lock, flags);
list_add_tail(&obj->sync_timeline_list, &sync_timeline_list_head);
spin_unlock_irqrestore(&sync_timeline_list_lock, flags);
}
Contributors
| Person | Tokens | Prop | Commits | CommitProp |
maarten lankhorst | maarten lankhorst | 41 | 100.00% | 1 | 100.00% |
| Total | 41 | 100.00% | 1 | 100.00% |
void sync_timeline_debug_remove(struct sync_timeline *obj)
{
unsigned long flags;
spin_lock_irqsave(&sync_timeline_list_lock, flags);
list_del(&obj->sync_timeline_list);
spin_unlock_irqrestore(&sync_timeline_list_lock, flags);
}
Contributors
| Person | Tokens | Prop | Commits | CommitProp |
maarten lankhorst | maarten lankhorst | 38 | 100.00% | 1 | 100.00% |
| Total | 38 | 100.00% | 1 | 100.00% |
void sync_file_debug_add(struct sync_file *sync_file)
{
unsigned long flags;
spin_lock_irqsave(&sync_file_list_lock, flags);
list_add_tail(&sync_file->sync_file_list, &sync_file_list_head);
spin_unlock_irqrestore(&sync_file_list_lock, flags);
}
Contributors
| Person | Tokens | Prop | Commits | CommitProp |
maarten lankhorst | maarten lankhorst | 33 | 80.49% | 1 | 50.00% |
gustavo padovan | gustavo padovan | 8 | 19.51% | 1 | 50.00% |
| Total | 41 | 100.00% | 2 | 100.00% |
void sync_file_debug_remove(struct sync_file *sync_file)
{
unsigned long flags;
spin_lock_irqsave(&sync_file_list_lock, flags);
list_del(&sync_file->sync_file_list);
spin_unlock_irqrestore(&sync_file_list_lock, flags);
}
Contributors
| Person | Tokens | Prop | Commits | CommitProp |
maarten lankhorst | maarten lankhorst | 31 | 81.58% | 1 | 50.00% |
gustavo padovan | gustavo padovan | 7 | 18.42% | 1 | 50.00% |
| Total | 38 | 100.00% | 2 | 100.00% |
static const char *sync_status_str(int status)
{
if (status == 0)
return "signaled";
if (status > 0)
return "active";
return "error";
}
Contributors
| Person | Tokens | Prop | Commits | CommitProp |
maarten lankhorst | maarten lankhorst | 32 | 100.00% | 1 | 100.00% |
| Total | 32 | 100.00% | 1 | 100.00% |
static void sync_print_fence(struct seq_file *s,
struct dma_fence *fence, bool show)
{
int status = 1;
struct sync_timeline *parent = dma_fence_parent(fence);
if (dma_fence_is_signaled_locked(fence))
status = fence->status;
seq_printf(s, " %s%sfence %s",
show ? parent->name : "",
show ? "_" : "",
sync_status_str(status));
if (status <= 0) {
struct timespec64 ts64 =
ktime_to_timespec64(fence->timestamp);
seq_printf(s, "@%lld.%09ld", (s64)ts64.tv_sec, ts64.tv_nsec);
}
if (fence->ops->timeline_value_str &&
fence->ops->fence_value_str) {
char value[64];
bool success;
fence->ops->fence_value_str(fence, value, sizeof(value));
success = strlen(value);
if (success) {
seq_printf(s, ": %s", value);
fence->ops->timeline_value_str(fence, value,
sizeof(value));
if (strlen(value))
seq_printf(s, " / %s", value);
}
}
seq_puts(s, "\n");
}
Contributors
| Person | Tokens | Prop | Commits | CommitProp |
maarten lankhorst | maarten lankhorst | 172 | 81.13% | 2 | 33.33% |
gustavo padovan | gustavo padovan | 27 | 12.74% | 2 | 33.33% |
tapasweni pathak | tapasweni pathak | 10 | 4.72% | 1 | 16.67% |
chris wilson | chris wilson | 3 | 1.42% | 1 | 16.67% |
| Total | 212 | 100.00% | 6 | 100.00% |
static void sync_print_obj(struct seq_file *s, struct sync_timeline *obj)
{
struct list_head *pos;
unsigned long flags;
seq_printf(s, "%s: %d\n", obj->name, obj->value);
spin_lock_irqsave(&obj->child_list_lock, flags);
list_for_each(pos, &obj->child_list_head) {
struct sync_pt *pt =
container_of(pos, struct sync_pt, child_list);
sync_print_fence(s, &pt->base, false);
}
spin_unlock_irqrestore(&obj->child_list_lock, flags);
}
Contributors
| Person | Tokens | Prop | Commits | CommitProp |
maarten lankhorst | maarten lankhorst | 86 | 90.53% | 1 | 25.00% |
gustavo padovan | gustavo padovan | 9 | 9.47% | 3 | 75.00% |
| Total | 95 | 100.00% | 4 | 100.00% |
static void sync_print_sync_file(struct seq_file *s,
struct sync_file *sync_file)
{
int i;
seq_printf(s, "[%p] %s: %s\n", sync_file, sync_file->name,
sync_status_str(!dma_fence_is_signaled(sync_file->fence)));
if (dma_fence_is_array(sync_file->fence)) {
struct dma_fence_array *array = to_dma_fence_array(sync_file->fence);
for (i = 0; i < array->num_fences; ++i)
sync_print_fence(s, array->fences[i], true);
} else {
sync_print_fence(s, sync_file->fence, true);
}
}
Contributors
| Person | Tokens | Prop | Commits | CommitProp |
maarten lankhorst | maarten lankhorst | 59 | 54.13% | 2 | 28.57% |
gustavo padovan | gustavo padovan | 46 | 42.20% | 4 | 57.14% |
chris wilson | chris wilson | 4 | 3.67% | 1 | 14.29% |
| Total | 109 | 100.00% | 7 | 100.00% |
static int sync_debugfs_show(struct seq_file *s, void *unused)
{
unsigned long flags;
struct list_head *pos;
seq_puts(s, "objs:\n--------------\n");
spin_lock_irqsave(&sync_timeline_list_lock, flags);
list_for_each(pos, &sync_timeline_list_head) {
struct sync_timeline *obj =
container_of(pos, struct sync_timeline,
sync_timeline_list);
sync_print_obj(s, obj);
seq_puts(s, "\n");
}
spin_unlock_irqrestore(&sync_timeline_list_lock, flags);
seq_puts(s, "fences:\n--------------\n");
spin_lock_irqsave(&sync_file_list_lock, flags);
list_for_each(pos, &sync_file_list_head) {
struct sync_file *sync_file =
container_of(pos, struct sync_file, sync_file_list);
sync_print_sync_file(s, sync_file);
seq_puts(s, "\n");
}
spin_unlock_irqrestore(&sync_file_list_lock, flags);
return 0;
}
Contributors
| Person | Tokens | Prop | Commits | CommitProp |
maarten lankhorst | maarten lankhorst | 138 | 93.88% | 1 | 50.00% |
gustavo padovan | gustavo padovan | 9 | 6.12% | 1 | 50.00% |
| Total | 147 | 100.00% | 2 | 100.00% |
static int sync_info_debugfs_open(struct inode *inode, struct file *file)
{
return single_open(file, sync_debugfs_show, inode->i_private);
}
Contributors
| Person | Tokens | Prop | Commits | CommitProp |
maarten lankhorst | maarten lankhorst | 27 | 96.43% | 1 | 50.00% |
gustavo padovan | gustavo padovan | 1 | 3.57% | 1 | 50.00% |
| Total | 28 | 100.00% | 2 | 100.00% |
static const struct file_operations sync_info_debugfs_fops = {
.open = sync_info_debugfs_open,
.read = seq_read,
.llseek = seq_lseek,
.release = single_release,
};
static __init int sync_debugfs_init(void)
{
dbgfs = debugfs_create_dir("sync", NULL);
/*
* The debugfs files won't ever get removed and thus, there is
* no need to protect it against removal races. The use of
* debugfs_create_file_unsafe() is actually safe here.
*/
debugfs_create_file_unsafe("info", 0444, dbgfs, NULL,
&sync_info_debugfs_fops);
debugfs_create_file_unsafe("sw_sync", 0644, dbgfs, NULL,
&sw_sync_debugfs_fops);
return 0;
}
Contributors
| Person | Tokens | Prop | Commits | CommitProp |
gustavo padovan | gustavo padovan | 25 | 50.00% | 2 | 50.00% |
maarten lankhorst | maarten lankhorst | 22 | 44.00% | 1 | 25.00% |
nicolai stange | nicolai stange | 3 | 6.00% | 1 | 25.00% |
| Total | 50 | 100.00% | 4 | 100.00% |
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);
}
}
}
Contributors
| Person | Tokens | Prop | Commits | CommitProp |
maarten lankhorst | maarten lankhorst | 141 | 100.00% | 1 | 100.00% |
| Total | 141 | 100.00% | 1 | 100.00% |
Overall Contributors
| Person | Tokens | Prop | Commits | CommitProp |
maarten lankhorst | maarten lankhorst | 891 | 84.45% | 2 | 12.50% |
gustavo padovan | gustavo padovan | 144 | 13.65% | 11 | 68.75% |
tapasweni pathak | tapasweni pathak | 10 | 0.95% | 1 | 6.25% |
chris wilson | chris wilson | 7 | 0.66% | 1 | 6.25% |
nicolai stange | nicolai stange | 3 | 0.28% | 1 | 6.25% |
| Total | 1055 | 100.00% | 16 | 100.00% |
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.