[PATCH 3/4] drm/i915: Register perf_ ioctls directly in i915_perf file.

Marius Vlad marius-cristian.vlad at nxp.com
Mon Sep 4 15:16:44 UTC 2017


From: Marius Vlad <marius.vlad0 at gmail.com>

Signed-off-by: Marius Vlad <marius.vlad0 at gmail.com>
Signed-off-by: Marius-Adrian Negreanu <groleo at gmail.com>
---
 drivers/gpu/drm/i915/i915_drv.c  |  3 ---
 drivers/gpu/drm/i915/i915_perf.c | 21 +++++++++++++++++++++
 2 files changed, 21 insertions(+), 3 deletions(-)

diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c
index 73be83d..09f8c6c 100644
--- a/drivers/gpu/drm/i915/i915_drv.c
+++ b/drivers/gpu/drm/i915/i915_drv.c
@@ -1243,9 +1243,6 @@ static struct drm_ioctl_desc i915_ioctls[] = {
 	DRM_IOCTL_DEF_DRV(I915_GEM_USERPTR, i915_gem_userptr_ioctl, DRM_RENDER_ALLOW),
 	DRM_IOCTL_DEF_DRV(I915_GEM_CONTEXT_GETPARAM, i915_gem_context_getparam_ioctl, DRM_RENDER_ALLOW),
 	DRM_IOCTL_DEF_DRV(I915_GEM_CONTEXT_SETPARAM, i915_gem_context_setparam_ioctl, DRM_RENDER_ALLOW),
-	DRM_IOCTL_DEF_DRV(I915_PERF_OPEN, i915_perf_open_ioctl, DRM_RENDER_ALLOW),
-	DRM_IOCTL_DEF_DRV(I915_PERF_ADD_CONFIG, i915_perf_add_config_ioctl, DRM_UNLOCKED|DRM_RENDER_ALLOW),
-	DRM_IOCTL_DEF_DRV(I915_PERF_REMOVE_CONFIG, i915_perf_remove_config_ioctl, DRM_UNLOCKED|DRM_RENDER_ALLOW),
 };
 
 /**
diff --git a/drivers/gpu/drm/i915/i915_perf.c b/drivers/gpu/drm/i915/i915_perf.c
index 94185d6..0b2a9d5 100644
--- a/drivers/gpu/drm/i915/i915_perf.c
+++ b/drivers/gpu/drm/i915/i915_perf.c
@@ -3374,6 +3374,12 @@ static struct ctl_table dev_root[] = {
 	{}
 };
 
+static struct drm_ioctl_desc i915_perf_ioctls[] = {
+	DRM_IOCTL_DEF_DRV(I915_PERF_OPEN, i915_perf_open_ioctl, DRM_RENDER_ALLOW),
+	DRM_IOCTL_DEF_DRV(I915_PERF_ADD_CONFIG, i915_perf_add_config_ioctl, DRM_UNLOCKED|DRM_RENDER_ALLOW),
+	DRM_IOCTL_DEF_DRV(I915_PERF_REMOVE_CONFIG, i915_perf_remove_config_ioctl, DRM_UNLOCKED|DRM_RENDER_ALLOW),
+};
+
 /**
  * i915_perf_init - initialize i915-perf state on module load
  * @dev_priv: i915 device instance
@@ -3385,6 +3391,8 @@ static struct ctl_table dev_root[] = {
  */
 void i915_perf_init(struct drm_i915_private *dev_priv)
 {
+	unsigned int i;
+	struct drm_device *dev = &dev_priv->drm;
 	dev_priv->perf.oa.timestamp_frequency = 0;
 
 	if (IS_HASWELL(dev_priv)) {
@@ -3483,6 +3491,11 @@ void i915_perf_init(struct drm_i915_private *dev_priv)
 
 		dev_priv->perf.initialized = true;
 	}
+
+	/* register ioctls */
+	for (i = 0; i < ARRAY_SIZE(i915_perf_ioctls); i++)
+		dev->driver->ioctl_register(dev, &i915_perf_ioctls[i]);
+
 }
 
 static int destroy_config(int id, void *p, void *data)
@@ -3501,9 +3514,14 @@ static int destroy_config(int id, void *p, void *data)
  */
 void i915_perf_fini(struct drm_i915_private *dev_priv)
 {
+	unsigned int i;
+	struct drm_device *dev = NULL;
+
 	if (!dev_priv->perf.initialized)
 		return;
 
+	dev = &dev_priv->drm;
+
 	idr_for_each(&dev_priv->perf.metrics_idr, destroy_config, dev_priv);
 	idr_destroy(&dev_priv->perf.metrics_idr);
 
@@ -3511,5 +3529,8 @@ void i915_perf_fini(struct drm_i915_private *dev_priv)
 
 	memset(&dev_priv->perf.oa.ops, 0, sizeof(dev_priv->perf.oa.ops));
 
+	for (i = 0; i < ARRAY_SIZE(i915_perf_ioctls); i++)
+		dev->driver->ioctl_deregister(dev, &i915_perf_ioctls[i]);
+
 	dev_priv->perf.initialized = false;
 }
-- 
2.9.3



More information about the dri-devel mailing list