summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>2019-06-14 05:51:10 -0400
committerDaniel Vetter <daniel.vetter@ffwll.ch>2019-06-14 10:59:51 -0400
commit987d65d013561947282525dbf5425b2bc28b69e6 (patch)
tree40ab87a2b54dd1c6d89489381e2db9814abf02d0
parentde85ec271a864c05e99ad5ffbed9e95d1b65c757 (diff)
drm: debugfs: make drm_debugfs_create_files() never fail
As stated before, there is no need to care if a debugfs function succeeds or not, and no code logic in the kernel should ever change based on a debugfs function return value, so make drm_debugfs_create_files() never fail. If it encounters an odd/rare/impossible error (i.e. out of memory, or a duplicate debugfs filename to be created), just keep on moving as if nothing improper had happened. Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com> Cc: Maxime Ripard <maxime.ripard@bootlin.com> Cc: Sean Paul <sean@poorly.run> Cc: David Airlie <airlied@linux.ie> Cc: Daniel Vetter <daniel@ffwll.ch> Cc: dri-devel@lists.freedesktop.org Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch> Link: https://patchwork.freedesktop.org/patch/msgid/20190614095110.3716-2-gregkh@linuxfoundation.org
-rw-r--r--drivers/gpu/drm/drm_debugfs.c26
1 files changed, 6 insertions, 20 deletions
diff --git a/drivers/gpu/drm/drm_debugfs.c b/drivers/gpu/drm/drm_debugfs.c
index 63b9951bb8f3..eab0f2687cd6 100644
--- a/drivers/gpu/drm/drm_debugfs.c
+++ b/drivers/gpu/drm/drm_debugfs.c
@@ -176,9 +176,8 @@ int drm_debugfs_create_files(const struct drm_info_list *files, int count,
176 struct dentry *root, struct drm_minor *minor) 176 struct dentry *root, struct drm_minor *minor)
177{ 177{
178 struct drm_device *dev = minor->dev; 178 struct drm_device *dev = minor->dev;
179 struct dentry *ent;
180 struct drm_info_node *tmp; 179 struct drm_info_node *tmp;
181 int i, ret; 180 int i;
182 181
183 for (i = 0; i < count; i++) { 182 for (i = 0; i < count; i++) {
184 u32 features = files[i].driver_features; 183 u32 features = files[i].driver_features;
@@ -188,22 +187,13 @@ int drm_debugfs_create_files(const struct drm_info_list *files, int count,
188 continue; 187 continue;
189 188
190 tmp = kmalloc(sizeof(struct drm_info_node), GFP_KERNEL); 189 tmp = kmalloc(sizeof(struct drm_info_node), GFP_KERNEL);
191 if (tmp == NULL) { 190 if (tmp == NULL)
192 ret = -1; 191 continue;
193 goto fail;
194 }
195 ent = debugfs_create_file(files[i].name, S_IFREG | S_IRUGO,
196 root, tmp, &drm_debugfs_fops);
197 if (!ent) {
198 DRM_ERROR("Cannot create /sys/kernel/debug/dri/%pd/%s\n",
199 root, files[i].name);
200 kfree(tmp);
201 ret = -1;
202 goto fail;
203 }
204 192
205 tmp->minor = minor; 193 tmp->minor = minor;
206 tmp->dent = ent; 194 tmp->dent = debugfs_create_file(files[i].name,
195 S_IFREG | S_IRUGO, root, tmp,
196 &drm_debugfs_fops);
207 tmp->info_ent = &files[i]; 197 tmp->info_ent = &files[i];
208 198
209 mutex_lock(&minor->debugfs_lock); 199 mutex_lock(&minor->debugfs_lock);
@@ -211,10 +201,6 @@ int drm_debugfs_create_files(const struct drm_info_list *files, int count,
211 mutex_unlock(&minor->debugfs_lock); 201 mutex_unlock(&minor->debugfs_lock);
212 } 202 }
213 return 0; 203 return 0;
214
215fail:
216 drm_debugfs_remove_files(files, count, minor);
217 return ret;
218} 204}
219EXPORT_SYMBOL(drm_debugfs_create_files); 205EXPORT_SYMBOL(drm_debugfs_create_files);
220 206