[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