Avoids ugly hacks in drivers debugfs code, if it depends on
dev->dev_private having already been initialized.

Signed-off-by: Rob Clark <robdclark at gmail.com>
---
Some cleanup that Daniel Vetter wants to do may make this unnecessary
in the future, but in order to unblock some msm patches that I'd like
to send for 3.16, I propose this patch.  If no objections, I could
include this in msm pull req.

 drivers/gpu/drm/drm_debugfs.c | 15 +++++++++------
 drivers/gpu/drm/drm_stub.c    | 24 ++++++++++++++++++------
 include/drm/drmP.h            |  6 ++----
 3 files changed, 29 insertions(+), 16 deletions(-)

diff --git a/drivers/gpu/drm/drm_debugfs.c b/drivers/gpu/drm/drm_debugfs.c
index b4b51d4..231d1ab 100644
--- a/drivers/gpu/drm/drm_debugfs.c
+++ b/drivers/gpu/drm/drm_debugfs.c
@@ -134,23 +134,26 @@ EXPORT_SYMBOL(drm_debugfs_create_files);
  * Initialize the DRI debugfs filesystem for a device
  *
  * \param dev DRM device
- * \param minor device minor number
- * \param root DRI debugfs dir entry.
  *
  * Create the DRI debugfs root entry "/sys/kernel/debug/dri", the device 
debugfs root entry
  * "/sys/kernel/debug/dri/%minor%/", and each entry in debugfs_list as
  * "/sys/kernel/debug/dri/%minor%/%name%".
  */
-int drm_debugfs_init(struct drm_minor *minor, int minor_id,
-                    struct dentry *root)
+int drm_debugfs_init(struct drm_minor *minor)
 {
-       struct drm_device *dev = minor->dev;
+       struct drm_device *dev;
+       struct dentry *root = drm_debugfs_root;
        char name[64];
        int ret;

+       if (!minor)
+               return 0;
+
+       dev = minor->dev;
+
        INIT_LIST_HEAD(&minor->debugfs_list);
        mutex_init(&minor->debugfs_lock);
-       sprintf(name, "%d", minor_id);
+       sprintf(name, "%d", minor->index);
        minor->debugfs_root = debugfs_create_dir(name, root);
        if (!minor->debugfs_root) {
                DRM_ERROR("Cannot create /sys/kernel/debug/dri/%s\n", name);
diff --git a/drivers/gpu/drm/drm_stub.c b/drivers/gpu/drm/drm_stub.c
index 3727ac8..94e3742 100644
--- a/drivers/gpu/drm/drm_stub.c
+++ b/drivers/gpu/drm/drm_stub.c
@@ -328,12 +328,6 @@ static int drm_minor_register(struct drm_device *dev, 
unsigned int type)

        new_minor->index = minor_id;

-       ret = drm_debugfs_init(new_minor, minor_id, drm_debugfs_root);
-       if (ret) {
-               DRM_ERROR("DRM: Failed to initialize /sys/kernel/debug/dri.\n");
-               goto err_id;
-       }
-
        ret = drm_sysfs_device_add(new_minor);
        if (ret) {
                DRM_ERROR("DRM: Error sysfs_device_add.\n");
@@ -723,6 +717,24 @@ int drm_dev_register(struct drm_device *dev, unsigned long 
flags)
                        goto err_minors;
        }

+       ret = drm_debugfs_init(dev->control);
+       if (ret) {
+               DRM_ERROR("DRM: Failed to initialize /sys/kernel/debug/dri.\n");
+               goto err_minors;
+       }
+
+       ret = drm_debugfs_init(dev->render);
+       if (ret) {
+               DRM_ERROR("DRM: Failed to initialize /sys/kernel/debug/dri.\n");
+               goto err_minors;
+       }
+
+       ret = drm_debugfs_init(dev->primary);
+       if (ret) {
+               DRM_ERROR("DRM: Failed to initialize /sys/kernel/debug/dri.\n");
+               goto err_minors;
+       }
+
        /* setup grouping for legacy outputs */
        if (drm_core_check_feature(dev, DRIVER_MODESET)) {
                ret = drm_mode_group_init_legacy_group(dev,
diff --git a/include/drm/drmP.h b/include/drm/drmP.h
index 12f10bc..76e6e03 100644
--- a/include/drm/drmP.h
+++ b/include/drm/drmP.h
@@ -1409,8 +1409,7 @@ extern struct drm_local_map *drm_getsarea(struct 
drm_device *dev);

                                /* Debugfs support */
 #if defined(CONFIG_DEBUG_FS)
-extern int drm_debugfs_init(struct drm_minor *minor, int minor_id,
-                           struct dentry *root);
+extern int drm_debugfs_init(struct drm_minor *minor);
 extern int drm_debugfs_create_files(const struct drm_info_list *files,
                                    int count, struct dentry *root,
                                    struct drm_minor *minor);
@@ -1418,8 +1417,7 @@ extern int drm_debugfs_remove_files(const struct 
drm_info_list *files,
                                    int count, struct drm_minor *minor);
 extern int drm_debugfs_cleanup(struct drm_minor *minor);
 #else
-static inline int drm_debugfs_init(struct drm_minor *minor, int minor_id,
-                                  struct dentry *root)
+static inline int drm_debugfs_init(struct drm_minor *minor)
 {
        return 0;
 }
-- 
1.9.3

Reply via email to