[PATCH] drm: move debugfs init after dev->load()

Rob Clark robdclark at gmail.com
Thu May 29 15:37:15 PDT 2014


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



More information about the dri-devel mailing list