This way we can create debugfs files directly, even between init and register.

Signed-off-by: Christian König <christian.koe...@amd.com>
---
 drivers/gpu/drm/drm_debugfs.c  | 12 ++++++++----
 drivers/gpu/drm/drm_drv.c      | 15 +++++++--------
 drivers/gpu/drm/drm_internal.h |  1 +
 3 files changed, 16 insertions(+), 12 deletions(-)

diff --git a/drivers/gpu/drm/drm_debugfs.c b/drivers/gpu/drm/drm_debugfs.c
index 4f643a490dc3..2724cac03509 100644
--- a/drivers/gpu/drm/drm_debugfs.c
+++ b/drivers/gpu/drm/drm_debugfs.c
@@ -221,8 +221,6 @@ EXPORT_SYMBOL(drm_debugfs_create_files);
 int drm_debugfs_init(struct drm_minor *minor, int minor_id,
                     struct dentry *root)
 {
-       struct drm_device *dev = minor->dev;
-       struct drm_debugfs_entry *entry, *tmp;
        char name[64];
 
        INIT_LIST_HEAD(&minor->debugfs_list);
@@ -230,6 +228,14 @@ int drm_debugfs_init(struct drm_minor *minor, int minor_id,
        sprintf(name, "%d", minor_id);
        minor->debugfs_root = debugfs_create_dir(name, root);
 
+       return 0;
+}
+
+void drm_debugfs_register(struct drm_minor *minor)
+{
+       struct drm_device *dev = minor->dev;
+       struct drm_debugfs_entry *entry, *tmp;
+
        drm_debugfs_add_files(minor->dev, drm_debugfs_list, 
DRM_DEBUGFS_ENTRIES);
 
        if (drm_drv_uses_atomic_modeset(dev)) {
@@ -250,8 +256,6 @@ int drm_debugfs_init(struct drm_minor *minor, int minor_id,
                                    minor->debugfs_root, entry, 
&drm_debugfs_entry_fops);
                list_del(&entry->list);
        }
-
-       return 0;
 }
 
 void drm_debugfs_late_register(struct drm_device *dev)
diff --git a/drivers/gpu/drm/drm_drv.c b/drivers/gpu/drm/drm_drv.c
index c6eb8972451a..88ce22c04672 100644
--- a/drivers/gpu/drm/drm_drv.c
+++ b/drivers/gpu/drm/drm_drv.c
@@ -156,6 +156,10 @@ static int drm_minor_alloc(struct drm_device *dev, 
unsigned int type)
        if (IS_ERR(minor->kdev))
                return PTR_ERR(minor->kdev);
 
+       r = drm_debugfs_init(minor, minor->index, drm_debugfs_root);
+       if (r)
+               return r;
+
        *drm_minor_get_slot(dev, type) = minor;
        return 0;
 }
@@ -172,15 +176,10 @@ static int drm_minor_register(struct drm_device *dev, 
unsigned int type)
        if (!minor)
                return 0;
 
-       if (minor->type == DRM_MINOR_ACCEL) {
+       if (minor->type == DRM_MINOR_ACCEL)
                accel_debugfs_init(minor, minor->index);
-       } else {
-               ret = drm_debugfs_init(minor, minor->index, drm_debugfs_root);
-               if (ret) {
-                       DRM_ERROR("DRM: Failed to initialize 
/sys/kernel/debug/dri.\n");
-                       goto err_debugfs;
-               }
-       }
+       else
+               drm_debugfs_register(minor);
 
        ret = device_add(minor->kdev);
        if (ret)
diff --git a/drivers/gpu/drm/drm_internal.h b/drivers/gpu/drm/drm_internal.h
index ed2103ee272c..332fb65a935a 100644
--- a/drivers/gpu/drm/drm_internal.h
+++ b/drivers/gpu/drm/drm_internal.h
@@ -185,6 +185,7 @@ int drm_gem_dumb_destroy(struct drm_file *file, struct 
drm_device *dev,
 #if defined(CONFIG_DEBUG_FS)
 int drm_debugfs_init(struct drm_minor *minor, int minor_id,
                     struct dentry *root);
+void drm_debugfs_register(struct drm_minor *minor);
 void drm_debugfs_cleanup(struct drm_minor *minor);
 void drm_debugfs_late_register(struct drm_device *dev);
 void drm_debugfs_connector_add(struct drm_connector *connector);
-- 
2.34.1

Reply via email to