Release 4.11 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 | 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 | 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 | 33 | 80.49% | 1 | 50.00% |
Gustavo Fernando 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 | 31 | 81.58% | 1 | 50.00% |
Gustavo Fernando 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 "error";
if (status > 0)
return "signaled";
return "active";
}
Contributors
Person | Tokens | Prop | Commits | CommitProp |
Maarten Lankhorst | 28 | 87.50% | 1 | 50.00% |
Chris Wilson | 4 | 12.50% | 1 | 50.00% |
Total | 32 | 100.00% | 2 | 100.00% |
static void sync_print_fence(struct seq_file *s,
struct dma_fence *fence, bool show)
{
struct sync_timeline *parent = dma_fence_parent(fence);
int status;
status = dma_fence_get_status_locked(fence);
seq_printf(s, " %s%sfence %s",
show ? parent->name : "",
show ? "_" : "",
sync_status_str(status));
if (status) {
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 | 158 | 78.22% | 2 | 28.57% |
Gustavo Fernando Padovan | 26 | 12.87% | 2 | 28.57% |
Tapasweni Pathak | 10 | 4.95% | 1 | 14.29% |
Chris Wilson | 8 | 3.96% | 2 | 28.57% |
Total | 202 | 100.00% | 7 | 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 | 86 | 90.53% | 1 | 25.00% |
Gustavo Fernando 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_get_status(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 | 59 | 54.63% | 2 | 25.00% |
Gustavo Fernando Padovan | 45 | 41.67% | 4 | 50.00% |
Chris Wilson | 4 | 3.70% | 2 | 25.00% |
Total | 108 | 100.00% | 8 | 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 | 138 | 93.88% | 1 | 50.00% |
Gustavo Fernando 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 | 27 | 96.43% | 1 | 50.00% |
Gustavo Fernando 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 Fernando Padovan | 25 | 50.00% | 2 | 50.00% |
Maarten Lankhorst | 22 | 44.00% | 1 | 25.00% |
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 | 141 | 100.00% | 1 | 100.00% |
Total | 141 | 100.00% | 1 | 100.00% |
Overall Contributors
Person | Tokens | Prop | Commits | CommitProp |
Maarten Lankhorst | 873 | 83.62% | 2 | 11.76% |
Gustavo Fernando Padovan | 142 | 13.60% | 11 | 64.71% |
Chris Wilson | 16 | 1.53% | 2 | 11.76% |
Tapasweni Pathak | 10 | 0.96% | 1 | 5.88% |
Nicolai Stange | 3 | 0.29% | 1 | 5.88% |
Total | 1044 | 100.00% | 17 | 100.00% |
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.