add support to add a directory for each client-id per drm node based on drm-file.
Signed-off-by: Sunil Khatri <sunil.kha...@amd.com> --- drivers/gpu/drm/drm_file.c | 11 +++++++++++ include/drm/drm_file.h | 7 +++++++ 2 files changed, 18 insertions(+) diff --git a/drivers/gpu/drm/drm_file.c b/drivers/gpu/drm/drm_file.c index 06ba6dcbf5ae..7a055fe7d4d5 100644 --- a/drivers/gpu/drm/drm_file.c +++ b/drivers/gpu/drm/drm_file.c @@ -39,6 +39,7 @@ #include <linux/poll.h> #include <linux/slab.h> #include <linux/vga_switcheroo.h> +#include <linux/debugfs.h> #include <drm/drm_client_event.h> #include <drm/drm_drv.h> @@ -133,6 +134,7 @@ struct drm_file *drm_file_alloc(struct drm_minor *minor) struct drm_device *dev = minor->dev; struct drm_file *file; int ret; + char *dir_name; file = kzalloc(sizeof(*file), GFP_KERNEL); if (!file) @@ -143,6 +145,12 @@ struct drm_file *drm_file_alloc(struct drm_minor *minor) rcu_assign_pointer(file->pid, get_pid(task_tgid(current))); file->minor = minor; + dir_name = kasprintf(GFP_KERNEL, "client-%llu", file->client_id); + if (!dir_name) + return ERR_PTR(-ENOMEM); + + file->debugfs_client = debugfs_create_dir(dir_name, minor->debugfs_root); + /* for compatibility root is always authenticated */ file->authenticated = capable(CAP_SYS_ADMIN); @@ -237,6 +245,9 @@ void drm_file_free(struct drm_file *file) drm_events_release(file); + debugfs_remove_recursive(file->debugfs_client); + file->debugfs_client = NULL; + if (drm_core_check_feature(dev, DRIVER_MODESET)) { drm_fb_release(file); drm_property_destroy_user_blobs(dev, file); diff --git a/include/drm/drm_file.h b/include/drm/drm_file.h index 5c3b2aa3e69d..eab7546aad79 100644 --- a/include/drm/drm_file.h +++ b/include/drm/drm_file.h @@ -400,6 +400,13 @@ struct drm_file { * @client_name_lock: Protects @client_name. */ struct mutex client_name_lock; + + /** + * @debugfs_client: + * + * debugfs directory for each client under a drm node. + */ + struct dentry *debugfs_client; }; /** -- 2.34.1