aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/drm_debugfs.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/drm_debugfs.c')
-rw-r--r--drivers/gpu/drm/drm_debugfs.c18
1 files changed, 11 insertions, 7 deletions
diff --git a/drivers/gpu/drm/drm_debugfs.c b/drivers/gpu/drm/drm_debugfs.c
index 9d2668a50872..1c7a1c0d3edd 100644
--- a/drivers/gpu/drm/drm_debugfs.c
+++ b/drivers/gpu/drm/drm_debugfs.c
@@ -33,6 +33,7 @@
33#include <linux/debugfs.h> 33#include <linux/debugfs.h>
34#include <linux/seq_file.h> 34#include <linux/seq_file.h>
35#include <linux/slab.h> 35#include <linux/slab.h>
36#include <linux/export.h>
36#include "drmP.h" 37#include "drmP.h"
37 38
38#if defined(CONFIG_DEBUG_FS) 39#if defined(CONFIG_DEBUG_FS)
@@ -107,11 +108,8 @@ int drm_debugfs_create_files(struct drm_info_list *files, int count,
107 ent = debugfs_create_file(files[i].name, S_IFREG | S_IRUGO, 108 ent = debugfs_create_file(files[i].name, S_IFREG | S_IRUGO,
108 root, tmp, &drm_debugfs_fops); 109 root, tmp, &drm_debugfs_fops);
109 if (!ent) { 110 if (!ent) {
110 char name[64];
111 strncpy(name, root->d_name.name,
112 min(root->d_name.len, 64U));
113 DRM_ERROR("Cannot create /sys/kernel/debug/dri/%s/%s\n", 111 DRM_ERROR("Cannot create /sys/kernel/debug/dri/%s/%s\n",
114 name, files[i].name); 112 root->d_name.name, files[i].name);
115 kfree(tmp); 113 kfree(tmp);
116 ret = -1; 114 ret = -1;
117 goto fail; 115 goto fail;
@@ -120,7 +118,10 @@ int drm_debugfs_create_files(struct drm_info_list *files, int count,
120 tmp->minor = minor; 118 tmp->minor = minor;
121 tmp->dent = ent; 119 tmp->dent = ent;
122 tmp->info_ent = &files[i]; 120 tmp->info_ent = &files[i];
123 list_add(&(tmp->list), &(minor->debugfs_nodes.list)); 121
122 mutex_lock(&minor->debugfs_lock);
123 list_add(&tmp->list, &minor->debugfs_list);
124 mutex_unlock(&minor->debugfs_lock);
124 } 125 }
125 return 0; 126 return 0;
126 127
@@ -148,7 +149,8 @@ int drm_debugfs_init(struct drm_minor *minor, int minor_id,
148 char name[64]; 149 char name[64];
149 int ret; 150 int ret;
150 151
151 INIT_LIST_HEAD(&minor->debugfs_nodes.list); 152 INIT_LIST_HEAD(&minor->debugfs_list);
153 mutex_init(&minor->debugfs_lock);
152 sprintf(name, "%d", minor_id); 154 sprintf(name, "%d", minor_id);
153 minor->debugfs_root = debugfs_create_dir(name, root); 155 minor->debugfs_root = debugfs_create_dir(name, root);
154 if (!minor->debugfs_root) { 156 if (!minor->debugfs_root) {
@@ -194,8 +196,9 @@ int drm_debugfs_remove_files(struct drm_info_list *files, int count,
194 struct drm_info_node *tmp; 196 struct drm_info_node *tmp;
195 int i; 197 int i;
196 198
199 mutex_lock(&minor->debugfs_lock);
197 for (i = 0; i < count; i++) { 200 for (i = 0; i < count; i++) {
198 list_for_each_safe(pos, q, &minor->debugfs_nodes.list) { 201 list_for_each_safe(pos, q, &minor->debugfs_list) {
199 tmp = list_entry(pos, struct drm_info_node, list); 202 tmp = list_entry(pos, struct drm_info_node, list);
200 if (tmp->info_ent == &files[i]) { 203 if (tmp->info_ent == &files[i]) {
201 debugfs_remove(tmp->dent); 204 debugfs_remove(tmp->dent);
@@ -204,6 +207,7 @@ int drm_debugfs_remove_files(struct drm_info_list *files, int count,
204 } 207 }
205 } 208 }
206 } 209 }
210 mutex_unlock(&minor->debugfs_lock);
207 return 0; 211 return 0;
208} 212}
209EXPORT_SYMBOL(drm_debugfs_remove_files); 213EXPORT_SYMBOL(drm_debugfs_remove_files);