[Nouveau] [PATCH v2 3/5] debugfs: we need a ctrl object for debugfs
Karol Herbst
nouveau at karolherbst.de
Mon Nov 9 07:11:26 PST 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 7c21465..6f317a7 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"
@@ -112,3 +113,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 abbeb58..634ad78 100644
--- a/drm/nouveau/nouveau_drm.c
+++ b/drm/nouveau/nouveau_drm.c
@@ -448,6 +448,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);
@@ -487,6 +488,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 3050042..376d11c 100644
--- a/drm/nouveau/nouveau_drm.h
+++ b/drm/nouveau/nouveau_drm.h
@@ -163,6 +163,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.3
More information about the Nouveau
mailing list