Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 086f2e5c authored by Noralf Trønnes's avatar Noralf Trønnes Committed by Daniel Vetter
Browse files

drm: debugfs: Remove all files automatically on cleanup



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: default avatarNoralf Trønnes <noralf@tronnes.org>
Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
Link: http://patchwork.freedesktop.org/patch/msgid/20170126225621.12314-2-noralf@tronnes.org
parent 73f1a585
Loading
Loading
Loading
Loading
+17 −3
Original line number Diff line number Diff line
@@ -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)
@@ -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.
 *
@@ -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;