[PATCH 48/49] set-fence
Chris Wilson
chris at chris-wilson.co.uk
Fri Nov 11 20:40:17 UTC 2016
---
drivers/gpu/drm/i915/i915_gem.c | 39 +++++++++++++++++++++++++++++++++++++++
include/uapi/drm/i915_drm.h | 2 ++
2 files changed, 41 insertions(+)
diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
index f7c6adcaea4e..9fcee91be774 100644
--- a/drivers/gpu/drm/i915/i915_gem.c
+++ b/drivers/gpu/drm/i915/i915_gem.c
@@ -3916,6 +3916,45 @@ i915_gem_get_fence_ioctl(struct drm_device *dev, void *data,
}
int
+i915_gem_set_fence_ioctl(struct drm_device *dev, void *data,
+ struct drm_file *file)
+{
+ struct drm_i915_gem_fence *arg = data;
+ struct drm_i915_gem_object *obj;
+ struct dma_fence *fence;
+ int err;
+
+ if (arg->flags & ~I915_FENCE_EXCLUSIVE)
+ return -EINVAL;
+
+ obj = i915_gem_object_lookup(file, arg->handle);
+ if (!obj)
+ return -ENOENT;
+
+ fence = sync_file_get_fence(arg->fence);
+ if (!fence) {
+ err = -EINVAL;
+ goto out;
+ }
+
+ err = 0;
+ ww_mutex_lock(&obj->resv->lock, NULL);
+ if (arg->flags & I915_FENCE_EXCLUSIVE) {
+ reservation_object_add_excl_fence(obj->resv, fence);
+ } else {
+ err = reservation_object_reserve_shared(obj->resv);
+ if (err == 0)
+ reservation_object_add_shared_fence(obj->resv, fence);
+ }
+ ww_mutex_unlock(&obj->resv->lock);
+ dma_fence_put(fence);
+
+out:
+ i915_gem_object_put(obj);
+ return err;
+}
+
+int
i915_gem_throttle_ioctl(struct drm_device *dev, void *data,
struct drm_file *file_priv)
{
diff --git a/include/uapi/drm/i915_drm.h b/include/uapi/drm/i915_drm.h
index b8795660b0f8..4eedb785fde7 100644
--- a/include/uapi/drm/i915_drm.h
+++ b/include/uapi/drm/i915_drm.h
@@ -260,6 +260,7 @@ typedef struct _drm_i915_sarea {
#define DRM_I915_GEM_CONTEXT_GETPARAM 0x34
#define DRM_I915_GEM_CONTEXT_SETPARAM 0x35
#define DRM_I915_GEM_GET_FENCE 0x36
+#define DRM_I915_GEM_SET_FENCE 0x37
#define DRM_IOCTL_I915_INIT DRM_IOW( DRM_COMMAND_BASE + DRM_I915_INIT, drm_i915_init_t)
#define DRM_IOCTL_I915_FLUSH DRM_IO ( DRM_COMMAND_BASE + DRM_I915_FLUSH)
@@ -315,6 +316,7 @@ typedef struct _drm_i915_sarea {
#define DRM_IOCTL_I915_GEM_CONTEXT_GETPARAM DRM_IOWR (DRM_COMMAND_BASE + DRM_I915_GEM_CONTEXT_GETPARAM, struct drm_i915_gem_context_param)
#define DRM_IOCTL_I915_GEM_CONTEXT_SETPARAM DRM_IOWR (DRM_COMMAND_BASE + DRM_I915_GEM_CONTEXT_SETPARAM, struct drm_i915_gem_context_param)
#define DRM_IOCTL_I915_GEM_GET_FENCE DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GEM_GET_FENCE, struct drm_i915_gem_fence)
+#define DRM_IOCTL_I915_GEM_SET_FENCE DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GEM_SET_FENCE, struct drm_i915_gem_fence)
/* Allow drivers to submit batchbuffers directly to hardware, relying
* on the security mechanisms provided by hardware.
--
2.10.2
More information about the Intel-gfx-trybot
mailing list