[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