[PATCH 34/43] ioc32

Chris Wilson chris at chris-wilson.co.uk
Fri Jun 2 18:10:15 UTC 2017


---
 drivers/gpu/drm/i915/Makefile     |  1 -
 drivers/gpu/drm/i915/i915_drv.c   |  6 ++++++
 drivers/gpu/drm/i915/i915_drv.h   |  6 ------
 drivers/gpu/drm/i915/i915_ioc32.c | 35 ++++++++++++++++++++---------------
 4 files changed, 26 insertions(+), 22 deletions(-)

diff --git a/drivers/gpu/drm/i915/Makefile b/drivers/gpu/drm/i915/Makefile
index f26db0118681..9237ff300dc6 100644
--- a/drivers/gpu/drm/i915/Makefile
+++ b/drivers/gpu/drm/i915/Makefile
@@ -24,7 +24,6 @@ i915-y := i915_drv.o \
 	  intel_pm.o \
 	  intel_runtime_pm.o
 
-i915-$(CONFIG_COMPAT)   += i915_ioc32.o
 i915-$(CONFIG_DEBUG_FS) += i915_debugfs.o intel_pipe_crc.o
 i915-$(CONFIG_PERF_EVENTS) += i915_pmu.o
 
diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c
index 86a5cf70a066..ae36ce62e4f1 100644
--- a/drivers/gpu/drm/i915/i915_drv.c
+++ b/drivers/gpu/drm/i915/i915_drv.c
@@ -2588,6 +2588,12 @@ static long i915_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
 	return ioctl->ioctl(filp, cmd, arg);
 }
 
+#ifdef CONFIG_COMPAT
+#include "i915_ioc32.c"
+#else
+#define i915_compat_ioctl NULL
+#endif
+
 static const struct vm_operations_struct i915_gem_vm_ops = {
 	.fault = i915_gem_fault,
 	.open = drm_gem_vm_open,
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index cffba638a3c8..ef46147b360b 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -3058,12 +3058,6 @@ __i915_printk(struct drm_i915_private *dev_priv, const char *level,
 #define i915_report_error(dev_priv, fmt, ...)				   \
 	__i915_printk(dev_priv, KERN_ERR, fmt, ##__VA_ARGS__)
 
-#ifdef CONFIG_COMPAT
-extern long i915_compat_ioctl(struct file *filp, unsigned int cmd,
-			      unsigned long arg);
-#else
-#define i915_compat_ioctl NULL
-#endif
 extern const struct dev_pm_ops i915_pm_ops;
 
 extern int i915_driver_load(struct pci_dev *pdev,
diff --git a/drivers/gpu/drm/i915/i915_ioc32.c b/drivers/gpu/drm/i915/i915_ioc32.c
index 9034c4c302e2..c5c570750d55 100644
--- a/drivers/gpu/drm/i915/i915_ioc32.c
+++ b/drivers/gpu/drm/i915/i915_ioc32.c
@@ -61,11 +61,11 @@ static long compat_i915_getparam(struct file *file, unsigned int cmd,
 			  &request->value))
 		return -EFAULT;
 
-	return drm_ioctl(file, DRM_IOCTL_I915_GETPARAM,
-			 (unsigned long)request);
+	return i915_ioctl(file,
+			  DRM_IOCTL_I915_GETPARAM, (unsigned long)request);
 }
 
-static drm_ioctl_compat_t *i915_compat_ioctls[] = {
+static drm_ioctl_compat_t * const i915_compat_ioctls[] = {
 	[DRM_I915_GETPARAM] = compat_i915_getparam,
 };
 
@@ -78,22 +78,27 @@ static drm_ioctl_compat_t *i915_compat_ioctls[] = {
  * \param arg user argument.
  * \return zero on success or negative number on failure.
  */
-long i915_compat_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
+static long i915_compat_ioctl(struct file *filp,
+			      unsigned int cmd, unsigned long arg)
 {
-	unsigned int nr = DRM_IOCTL_NR(cmd);
-	drm_ioctl_compat_t *fn = NULL;
-	int ret;
+	unsigned int nr = DRM_IOCTL_NR(cmd) - DRM_COMMAND_BASE;
+	drm_ioctl_compat_t *fn;
 
-	if (nr < DRM_COMMAND_BASE || nr >= DRM_COMMAND_END)
+	if (nr >= ARRAY_SIZE(i915_ioctls))
 		return drm_compat_ioctl(filp, cmd, arg);
 
-	if (nr < DRM_COMMAND_BASE + ARRAY_SIZE(i915_compat_ioctls))
-		fn = i915_compat_ioctls[nr - DRM_COMMAND_BASE];
+	fn = NULL;
+	if (nr < ARRAY_SIZE(i915_compat_ioctls))
+		fn = i915_compat_ioctls[nr];
+	if (!fn) {
+		const struct drm_ioctl_desc *ioctl;
 
-	if (fn != NULL)
-		ret = (*fn) (filp, cmd, arg);
-	else
-		ret = drm_ioctl(filp, cmd, arg);
+		ioctl = &i915_ioctls[nr];
+		if (ioctl->flags & DRM_DRIVER_IOCTL)
+			fn = ioctl->ioctl;
+		else
+			fn = drm_ioctl;
+	}
 
-	return ret;
+	return fn(filp, cmd, arg);
 }
-- 
2.11.0



More information about the Intel-gfx-trybot mailing list