Skip to content

Commit

Permalink
drm: debugfs: Remove all files automatically on cleanup
Browse files Browse the repository at this point in the history
Instead of having the drivers call drm_debugfs_remove_files() in
their drm_driver->debugfs_cleanup hook, do it automatically by
traversing minor->debugfs_list.
Also use debugfs_remove_recursive() so drivers who add their own
debugfs files don't have to keep track of them for removal.

Signed-off-by: Noralf Trønnes <[email protected]>
Signed-off-by: Daniel Vetter <[email protected]>
Link: http://patchwork.freedesktop.org/patch/msgid/[email protected]
  • Loading branch information
notro authored and danvet committed Jan 27, 2017
1 parent 73f1a58 commit 086f2e5
Showing 1 changed file with 17 additions and 3 deletions.
20 changes: 17 additions & 3 deletions drivers/gpu/drm/drm_debugfs.c
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,8 @@ static const struct file_operations drm_debugfs_fops = {
* \return Zero on success, non-zero on failure
*
* Create a given set of debugfs files represented by an array of
* gdm_debugfs_lists in the given root directory.
* &drm_info_list in the given root directory. These files will be removed
* automatically on drm_debugfs_cleanup().
*/
int drm_debugfs_create_files(const struct drm_info_list *files, int count,
struct dentry *root, struct drm_minor *minor)
Expand Down Expand Up @@ -218,6 +219,19 @@ int drm_debugfs_remove_files(const struct drm_info_list *files, int count,
}
EXPORT_SYMBOL(drm_debugfs_remove_files);

static void drm_debugfs_remove_all_files(struct drm_minor *minor)
{
struct drm_info_node *node, *tmp;

mutex_lock(&minor->debugfs_lock);
list_for_each_entry_safe(node, tmp, &minor->debugfs_list, list) {
debugfs_remove(node->dent);
list_del(&node->list);
kfree(node);
}
mutex_unlock(&minor->debugfs_lock);
}

/**
* Cleanup the debugfs filesystem resources.
*
Expand Down Expand Up @@ -245,9 +259,9 @@ int drm_debugfs_cleanup(struct drm_minor *minor)
}
}

drm_debugfs_remove_files(drm_debugfs_list, DRM_DEBUGFS_ENTRIES, minor);
drm_debugfs_remove_all_files(minor);

debugfs_remove(minor->debugfs_root);
debugfs_remove_recursive(minor->debugfs_root);
minor->debugfs_root = NULL;

return 0;
Expand Down

0 comments on commit 086f2e5

Please sign in to comment.