diff options
Diffstat (limited to 'drivers/staging/vc04_services/interface/vchiq_arm/vchiq_debugfs.c')
-rw-r--r-- | drivers/staging/vc04_services/interface/vchiq_arm/vchiq_debugfs.c | 137 |
1 files changed, 24 insertions, 113 deletions
diff --git a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_debugfs.c b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_debugfs.c index 766b4fe5f32c..38805504d462 100644 --- a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_debugfs.c +++ b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_debugfs.c @@ -51,25 +51,14 @@ #define VCHIQ_LOG_INFO_STR "info" #define VCHIQ_LOG_TRACE_STR "trace" -/* Top-level debug info */ -struct vchiq_debugfs_info { - /* Global 'vchiq' debugfs entry used by all instances */ - struct dentry *vchiq_cfg_dir; - - /* one entry per client process */ - struct dentry *clients; - - /* log categories */ - struct dentry *log_categories; -}; - -static struct vchiq_debugfs_info debugfs_info; +/* Global 'vchiq' debugfs and clients entry used by all instances */ +struct dentry *vchiq_dbg_dir; +struct dentry *vchiq_dbg_clients; /* Log category debugfs entries */ struct vchiq_debugfs_log_entry { const char *name; - int *plevel; - struct dentry *dir; + void *plevel; }; static struct vchiq_debugfs_log_entry vchiq_debugfs_log_entries[] = { @@ -81,9 +70,6 @@ static struct vchiq_debugfs_log_entry vchiq_debugfs_log_entries[] = { }; static int n_log_entries = ARRAY_SIZE(vchiq_debugfs_log_entries); -static struct dentry *vchiq_clients_top(void); -static struct dentry *vchiq_debugfs_top(void); - static int debugfs_log_show(struct seq_file *f, void *offset) { int *levp = f->private; @@ -157,36 +143,6 @@ static const struct file_operations debugfs_log_fops = { .release = single_release, }; -/* create an entry under <debugfs>/vchiq/log for each log category */ -static int vchiq_debugfs_create_log_entries(struct dentry *top) -{ - struct dentry *dir; - size_t i; - int ret = 0; - - dir = debugfs_create_dir("log", vchiq_debugfs_top()); - if (!dir) - return -ENOMEM; - debugfs_info.log_categories = dir; - - for (i = 0; i < n_log_entries; i++) { - void *levp = (void *)vchiq_debugfs_log_entries[i].plevel; - - dir = debugfs_create_file(vchiq_debugfs_log_entries[i].name, - 0644, - debugfs_info.log_categories, - levp, - &debugfs_log_fops); - if (!dir) { - ret = -ENOMEM; - break; - } - - vchiq_debugfs_log_entries[i].dir = dir; - } - return ret; -} - static int debugfs_usecount_show(struct seq_file *f, void *offset) { VCHIQ_INSTANCE_T instance = f->private; @@ -268,43 +224,21 @@ static const struct file_operations debugfs_trace_fops = { }; /* add an instance (process) to the debugfs entries */ -int vchiq_debugfs_add_instance(VCHIQ_INSTANCE_T instance) +void vchiq_debugfs_add_instance(VCHIQ_INSTANCE_T instance) { char pidstr[16]; - struct dentry *top, *use_count, *trace; - struct dentry *clients = vchiq_clients_top(); + struct dentry *top; snprintf(pidstr, sizeof(pidstr), "%d", vchiq_instance_get_pid(instance)); - top = debugfs_create_dir(pidstr, clients); - if (!top) - goto fail_top; + top = debugfs_create_dir(pidstr, vchiq_dbg_clients); - use_count = debugfs_create_file("use_count", - 0444, top, - instance, - &debugfs_usecount_fops); - if (!use_count) - goto fail_use_count; - - trace = debugfs_create_file("trace", - 0644, top, - instance, - &debugfs_trace_fops); - if (!trace) - goto fail_trace; + debugfs_create_file("use_count", 0444, top, instance, + &debugfs_usecount_fops); + debugfs_create_file("trace", 0644, top, instance, &debugfs_trace_fops); vchiq_instance_get_debugfs_node(instance)->dentry = top; - - return 0; - -fail_trace: - debugfs_remove(use_count); -fail_use_count: - debugfs_remove(top); -fail_top: - return -ENOMEM; } void vchiq_debugfs_remove_instance(VCHIQ_INSTANCE_T instance) @@ -314,64 +248,41 @@ void vchiq_debugfs_remove_instance(VCHIQ_INSTANCE_T instance) debugfs_remove_recursive(node->dentry); } -int vchiq_debugfs_init(void) +void vchiq_debugfs_init(void) { - BUG_ON(debugfs_info.vchiq_cfg_dir != NULL); - - debugfs_info.vchiq_cfg_dir = debugfs_create_dir("vchiq", NULL); - if (debugfs_info.vchiq_cfg_dir == NULL) - goto fail; - - debugfs_info.clients = debugfs_create_dir("clients", - vchiq_debugfs_top()); - if (!debugfs_info.clients) - goto fail; - - if (vchiq_debugfs_create_log_entries(vchiq_debugfs_top()) != 0) - goto fail; + struct dentry *dir; + int i; - return 0; + vchiq_dbg_dir = debugfs_create_dir("vchiq", NULL); + vchiq_dbg_clients = debugfs_create_dir("clients", vchiq_dbg_dir); -fail: - vchiq_debugfs_deinit(); - vchiq_log_error(vchiq_arm_log_level, - "%s: failed to create debugfs directory", - __func__); + /* create an entry under <debugfs>/vchiq/log for each log category */ + dir = debugfs_create_dir("log", vchiq_dbg_dir); - return -ENOMEM; + for (i = 0; i < n_log_entries; i++) + debugfs_create_file(vchiq_debugfs_log_entries[i].name, 0644, + dir, vchiq_debugfs_log_entries[i].plevel, + &debugfs_log_fops); } /* remove all the debugfs entries */ void vchiq_debugfs_deinit(void) { - debugfs_remove_recursive(vchiq_debugfs_top()); -} - -static struct dentry *vchiq_clients_top(void) -{ - return debugfs_info.clients; -} - -static struct dentry *vchiq_debugfs_top(void) -{ - BUG_ON(debugfs_info.vchiq_cfg_dir == NULL); - return debugfs_info.vchiq_cfg_dir; + debugfs_remove_recursive(vchiq_dbg_dir); } #else /* CONFIG_DEBUG_FS */ -int vchiq_debugfs_init(void) +void vchiq_debugfs_init(void) { - return 0; } void vchiq_debugfs_deinit(void) { } -int vchiq_debugfs_add_instance(VCHIQ_INSTANCE_T instance) +void vchiq_debugfs_add_instance(VCHIQ_INSTANCE_T instance) { - return 0; } void vchiq_debugfs_remove_instance(VCHIQ_INSTANCE_T instance) |