[PATCH 45/54] fast-throttle-ioctl
Chris Wilson
chris at chris-wilson.co.uk
Sun Jun 4 12:08:28 UTC 2017
---
drivers/gpu/drm/i915/i915_drv.c | 2 +-
drivers/gpu/drm/i915/i915_drv.h | 5 +++--
drivers/gpu/drm/i915/i915_gem.c | 24 ++++++++++--------------
3 files changed, 14 insertions(+), 17 deletions(-)
diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c
index cd3259faf235..010d86b0c2f0 100644
--- a/drivers/gpu/drm/i915/i915_drv.c
+++ b/drivers/gpu/drm/i915/i915_drv.c
@@ -2552,7 +2552,7 @@ static const struct drm_ioctl_desc i915_ioctls[] = {
DRM_DRIVER_IOCTL_DEF(I915_GEM_BUSY, i915_gem_busy_ioctl, DRM_RENDER_ALLOW),
DRM_IOCTL_DEF_DRV(I915_GEM_SET_CACHING, i915_gem_set_caching_ioctl, DRM_RENDER_ALLOW),
DRM_DRIVER_IOCTL_DEF(I915_GEM_GET_CACHING, i915_gem_get_caching_ioctl, DRM_RENDER_ALLOW),
- DRM_IOCTL_DEF_DRV(I915_GEM_THROTTLE, i915_gem_throttle_ioctl, DRM_AUTH|DRM_RENDER_ALLOW),
+ DRM_DRIVER_IOCTL_DEF(I915_GEM_THROTTLE, i915_gem_throttle_ioctl, DRM_RENDER_ALLOW),
DRM_IOCTL_DEF_DRV(I915_GEM_ENTERVT, drm_noop, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
DRM_IOCTL_DEF_DRV(I915_GEM_LEAVEVT, drm_noop, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
DRM_IOCTL_DEF_DRV(I915_GEM_CREATE, i915_gem_create_ioctl, DRM_RENDER_ALLOW),
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index 1ba1a2189110..3935baf0d767 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -3215,8 +3215,9 @@ long i915_gem_get_caching_ioctl(struct file *filp,
unsigned long data);
int i915_gem_set_caching_ioctl(struct drm_device *dev, void *data,
struct drm_file *file);
-int i915_gem_throttle_ioctl(struct drm_device *dev, void *data,
- struct drm_file *file_priv);
+long i915_gem_throttle_ioctl(struct file *filp,
+ unsigned int cmd,
+ unsigned long data);
int i915_gem_madvise_ioctl(struct drm_device *dev, void *data,
struct drm_file *file_priv);
int i915_gem_set_tiling_ioctl(struct drm_device *dev, void *data,
diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
index c5fea4987ce6..2af5aa78fb3c 100644
--- a/drivers/gpu/drm/i915/i915_gem.c
+++ b/drivers/gpu/drm/i915/i915_gem.c
@@ -4012,21 +4012,23 @@ i915_gem_object_set_to_cpu_domain(struct drm_i915_gem_object *obj, bool write)
* This should get us reasonable parallelism between CPU and GPU but also
* relatively low latency when blocking on a particular request to finish.
*/
-static int
-i915_gem_ring_throttle(struct drm_device *dev, struct drm_file *file)
+long
+i915_gem_throttle_ioctl(struct file *filp,
+ unsigned int cmd,
+ unsigned long data)
{
- struct drm_i915_private *dev_priv = to_i915(dev);
- struct drm_i915_file_private *file_priv = file->driver_priv;
+ struct drm_file *drm_file = filp->private_data;
+ struct drm_i915_file_private *file = drm_file->driver_priv;
unsigned long recent_enough = jiffies - DRM_I915_THROTTLE_JIFFIES;
struct drm_i915_gem_request *request, *target = NULL;
long ret;
/* ABI: return -EIO if already wedged */
- if (i915_terminally_wedged(&dev_priv->gpu_error))
+ if (i915_terminally_wedged(&file->dev_priv->gpu_error))
return -EIO;
- spin_lock(&file_priv->mm.lock);
- list_for_each_entry(request, &file_priv->mm.request_list, client_link) {
+ spin_lock(&file->mm.lock);
+ list_for_each_entry(request, &file->mm.request_list, client_link) {
if (time_after_eq(request->emitted_jiffies, recent_enough))
break;
@@ -4039,7 +4041,7 @@ i915_gem_ring_throttle(struct drm_device *dev, struct drm_file *file)
}
if (target)
i915_gem_request_get(target);
- spin_unlock(&file_priv->mm.lock);
+ spin_unlock(&file->mm.lock);
if (target == NULL)
return 0;
@@ -4269,12 +4271,6 @@ long i915_gem_busy_ioctl(struct file *filp,
return -ENOENT;
}
-int
-i915_gem_throttle_ioctl(struct drm_device *dev, void *data,
- struct drm_file *file_priv)
-{
- return i915_gem_ring_throttle(dev, file_priv);
-}
int
i915_gem_madvise_ioctl(struct drm_device *dev, void *data,
--
2.11.0
More information about the Intel-gfx-trybot
mailing list