[Nouveau] [PATCH 3/6] debugfs: we need a ctrl object for debugfs

Karol Herbst nouveau at karolherbst.de
Tue Oct 13 04:39:08 PDT 2015


Signed-off-by: Karol Herbst <nouveau at karolherbst.de>
---
 drm/nouveau/nouveau_debugfs.c | 30 ++++++++++++++++++++++++++++++
 drm/nouveau/nouveau_debugfs.h | 26 ++++++++++++++++++++++++++
 drm/nouveau/nouveau_drm.c     |  2 ++
 drm/nouveau/nouveau_drm.h     |  1 +
 4 files changed, 59 insertions(+)

diff --git a/drm/nouveau/nouveau_debugfs.c b/drm/nouveau/nouveau_debugfs.c
index 3736796..53d2233 100644
--- a/drm/nouveau/nouveau_debugfs.c
+++ b/drm/nouveau/nouveau_debugfs.c
@@ -29,6 +29,7 @@
  */
 
 #include <linux/debugfs.h>
+#include <nvif/ioctl.h>
 #include "nouveau_debugfs.h"
 #include "nouveau_drm.h"
 
@@ -114,3 +115,32 @@ nouveau_drm_debugfs_cleanup(struct drm_minor *minor)
 				1, minor);
 	}
 }
+
+int
+nouveau_debugfs_init(struct nouveau_drm *drm)
+{
+	int ret;
+
+	drm->debugfs = kzalloc(sizeof(*drm->debugfs), GFP_KERNEL);
+	if (!drm->debugfs) {
+		return-ENOMEM;
+	}
+
+	ret = nvif_object_init(&drm->device.object, NVDRM_CONTROL,
+			NVIF_IOCTL_NEW_V0_CONTROL, NULL, 0, &drm->debugfs->ctrl);
+
+	if (ret)
+		return ret;
+
+	return 0;
+}
+
+void
+nouveau_debugfs_cleanup(struct nouveau_drm *drm)
+{
+	if (drm->debugfs && drm->debugfs->ctrl.priv)
+		nvif_object_fini(&drm->debugfs->ctrl);
+
+	kfree(drm->debugfs);
+	drm->debugfs = NULL;
+}
diff --git a/drm/nouveau/nouveau_debugfs.h b/drm/nouveau/nouveau_debugfs.h
index 42d65c9..6b89fb1 100644
--- a/drm/nouveau/nouveau_debugfs.h
+++ b/drm/nouveau/nouveau_debugfs.h
@@ -4,8 +4,23 @@
 #include <drm/drmP.h>
 
 #if defined(CONFIG_DEBUG_FS)
+
+#include "nouveau_drm.h"
+
+struct nouveau_debugfs {
+	struct nvif_object ctrl;
+};
+
+static inline struct nouveau_debugfs *
+nouveau_debugfs(struct drm_device *dev)
+{
+	return nouveau_drm(dev)->debugfs;
+}
+
 extern int  nouveau_drm_debugfs_init(struct drm_minor *);
 extern void nouveau_drm_debugfs_cleanup(struct drm_minor *);
+extern int  nouveau_debugfs_init(struct nouveau_drm *);
+extern void nouveau_debugfs_cleanup(struct nouveau_drm *);
 #else
 static inline int
 nouveau_drm_debugfs_init(struct drm_minor *minor)
@@ -18,6 +33,17 @@ nouveau_drm_debugfs_cleanup(struct drm_minor *minor)
 {
 }
 
+static inline int
+nouveau_debugfs_init(struct nouveau_drm *)
+{
+	return 0;
+}
+
+static inline void
+nouveau_debugfs_cleanup(struct nouveau_drm *)
+{
+}
+
 #endif
 
 #endif
diff --git a/drm/nouveau/nouveau_drm.c b/drm/nouveau/nouveau_drm.c
index 3044dde..17a0f31 100644
--- a/drm/nouveau/nouveau_drm.c
+++ b/drm/nouveau/nouveau_drm.c
@@ -450,6 +450,7 @@ nouveau_drm_load(struct drm_device *dev, unsigned long flags)
 			goto fail_dispinit;
 	}
 
+	nouveau_debugfs_init(drm);
 	nouveau_sysfs_init(dev);
 	nouveau_hwmon_init(dev);
 	nouveau_accel_init(drm);
@@ -489,6 +490,7 @@ nouveau_drm_unload(struct drm_device *dev)
 	nouveau_accel_fini(drm);
 	nouveau_hwmon_fini(dev);
 	nouveau_sysfs_fini(dev);
+	nouveau_debugfs_cleanup(drm);
 
 	if (dev->mode_config.num_crtc)
 		nouveau_display_fini(dev);
diff --git a/drm/nouveau/nouveau_drm.h b/drm/nouveau/nouveau_drm.h
index 3c902c2..a075d60 100644
--- a/drm/nouveau/nouveau_drm.h
+++ b/drm/nouveau/nouveau_drm.h
@@ -166,6 +166,7 @@ struct nouveau_drm {
 	/* power management */
 	struct nouveau_hwmon *hwmon;
 	struct nouveau_sysfs *sysfs;
+	struct nouveau_debugfs *debugfs;
 
 	/* display power reference */
 	bool have_disp_power_ref;
-- 
2.6.1



More information about the Nouveau mailing list