diff options
author | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2019-06-14 05:51:10 -0400 |
---|---|---|
committer | Daniel Vetter <daniel.vetter@ffwll.ch> | 2019-06-14 10:59:51 -0400 |
commit | 987d65d013561947282525dbf5425b2bc28b69e6 (patch) | |
tree | 40ab87a2b54dd1c6d89489381e2db9814abf02d0 | |
parent | de85ec271a864c05e99ad5ffbed9e95d1b65c757 (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.c | 26 |
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 | |||
215 | fail: | ||
216 | drm_debugfs_remove_files(files, count, minor); | ||
217 | return ret; | ||
218 | } | 204 | } |
219 | EXPORT_SYMBOL(drm_debugfs_create_files); | 205 | EXPORT_SYMBOL(drm_debugfs_create_files); |
220 | 206 | ||