All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/2] drm/i915: timeline semaphore support
@ 2019-05-23 11:46 Lionel Landwerlin
  2019-05-23 11:46 ` [PATCH 1/2] drm/syncobj: add an output syncobj parameter to find_fence Lionel Landwerlin
                   ` (4 more replies)
  0 siblings, 5 replies; 16+ messages in thread
From: Lionel Landwerlin @ 2019-05-23 11:46 UTC (permalink / raw)
  To: intel-gfx

Hi all,

This series implement required changes to support Vulkan timeline
semaphores. Mesa's Anv driver will make use of this, unfortunately we
can't disclose the userspace changes yet.

Hoping we can bend the rules a bit (like for the drm-syncobj changes
landed already), so that we can be compliant on the first day the
Vulkan spec is released.

Cheers,

Lionel Landwerlin (2):
  drm/syncobj: add an output syncobj parameter to find_fence
  drm/i915: add syncobj timeline support

 drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c     |   4 +-
 drivers/gpu/drm/drm_syncobj.c              |  45 +++--
 drivers/gpu/drm/i915/i915_drv.c            |   4 +-
 drivers/gpu/drm/i915/i915_gem_execbuffer.c | 190 ++++++++++++++++-----
 drivers/gpu/drm/v3d/v3d_gem.c              |   5 +-
 include/drm/drm_syncobj.h                  |   1 +
 include/uapi/drm/i915_drm.h                |  38 ++++-
 7 files changed, 220 insertions(+), 67 deletions(-)

--
2.21.0.392.gf8f6787159e
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 16+ messages in thread

* [PATCH 1/2] drm/syncobj: add an output syncobj parameter to find_fence
  2019-05-23 11:46 [PATCH 0/2] drm/i915: timeline semaphore support Lionel Landwerlin
@ 2019-05-23 11:46 ` Lionel Landwerlin
  2019-05-23 12:11   ` Zhou, David(ChunMing)
  2019-05-23 11:46 ` [PATCH 2/2] drm/i915: add syncobj timeline support Lionel Landwerlin
                   ` (3 subsequent siblings)
  4 siblings, 1 reply; 16+ messages in thread
From: Lionel Landwerlin @ 2019-05-23 11:46 UTC (permalink / raw)
  To: intel-gfx; +Cc: DRI-Devel, Christian Koenig

We would like to get both the fence & the syncobj in i915 rather than
doing 2 calls to drm_syncobj_find() & drm_syncobj_find_fence().

Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
Cc: Christian Koenig <Christian.Koenig@amd.com>
Cc: David(ChunMing) Zhou <David1.Zhou@amd.com>
Cc: Eric Anholt <eric@anholt.net>
CC: DRI-Devel <dri-devel@lists.freedesktop.org>
---
 drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c |  4 ++-
 drivers/gpu/drm/drm_syncobj.c          | 45 +++++++++++++++++---------
 drivers/gpu/drm/v3d/v3d_gem.c          |  5 ++-
 include/drm/drm_syncobj.h              |  1 +
 4 files changed, 38 insertions(+), 17 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
index 2f6239b6be6f..09fde3c73a2c 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
@@ -1124,10 +1124,11 @@ static int amdgpu_syncobj_lookup_and_add_to_sync(struct amdgpu_cs_parser *p,
 						 uint32_t handle, u64 point,
 						 u64 flags)
 {
+	struct drm_syncobj *syncobj;
 	struct dma_fence *fence;
 	int r;
 
-	r = drm_syncobj_find_fence(p->filp, handle, point, flags, &fence);
+	r = drm_syncobj_find_fence(p->filp, handle, point, flags, &syncobj, &fence);
 	if (r) {
 		DRM_ERROR("syncobj %u failed to find fence @ %llu (%d)!\n",
 			  handle, point, r);
@@ -1136,6 +1137,7 @@ static int amdgpu_syncobj_lookup_and_add_to_sync(struct amdgpu_cs_parser *p,
 
 	r = amdgpu_sync_fence(p->adev, &p->job->sync, fence, true);
 	dma_fence_put(fence);
+	drm_syncobj_put(syncobj);
 
 	return r;
 }
diff --git a/drivers/gpu/drm/drm_syncobj.c b/drivers/gpu/drm/drm_syncobj.c
index 3d400905100b..f2fd0c1fb1d3 100644
--- a/drivers/gpu/drm/drm_syncobj.c
+++ b/drivers/gpu/drm/drm_syncobj.c
@@ -222,29 +222,32 @@ static void drm_syncobj_assign_null_handle(struct drm_syncobj *syncobj)
  * @handle: sync object handle to lookup.
  * @point: timeline point
  * @flags: DRM_SYNCOBJ_WAIT_FLAGS_WAIT_FOR_SUBMIT or not
+ * @syncobj: out parameter for the syncobj
  * @fence: out parameter for the fence
  *
  * This is just a convenience function that combines drm_syncobj_find() and
  * drm_syncobj_fence_get().
  *
- * Returns 0 on success or a negative error value on failure. On success @fence
- * contains a reference to the fence, which must be released by calling
- * dma_fence_put().
+ * Returns 0 on success or a negative error value on failure. On
+ * success @syncobj and @fence contains a reference respectively to
+ * the syncobj and to the fence, which must be released by calling
+ * respectively drm_syncobj_put() and dma_fence_put().
  */
 int drm_syncobj_find_fence(struct drm_file *file_private,
 			   u32 handle, u64 point, u64 flags,
+			   struct drm_syncobj **syncobj,
 			   struct dma_fence **fence)
 {
-	struct drm_syncobj *syncobj = drm_syncobj_find(file_private, handle);
 	struct syncobj_wait_entry wait;
 	u64 timeout = nsecs_to_jiffies64(DRM_SYNCOBJ_WAIT_FOR_SUBMIT_TIMEOUT);
 	int ret;
 
-	if (!syncobj)
+	*syncobj = drm_syncobj_find(file_private, handle);
+
+	if (!(*syncobj))
 		return -ENOENT;
 
-	*fence = drm_syncobj_fence_get(syncobj);
-	drm_syncobj_put(syncobj);
+	*fence = drm_syncobj_fence_get(*syncobj);
 
 	if (*fence) {
 		ret = dma_fence_chain_find_seqno(fence, point);
@@ -255,13 +258,15 @@ int drm_syncobj_find_fence(struct drm_file *file_private,
 		ret = -EINVAL;
 	}
 
-	if (!(flags & DRM_SYNCOBJ_WAIT_FLAGS_WAIT_FOR_SUBMIT))
+	if (!(flags & DRM_SYNCOBJ_WAIT_FLAGS_WAIT_FOR_SUBMIT)) {
+		drm_syncobj_put(*syncobj);
 		return ret;
+	}
 
 	memset(&wait, 0, sizeof(wait));
 	wait.task = current;
 	wait.point = point;
-	drm_syncobj_fence_add_wait(syncobj, &wait);
+	drm_syncobj_fence_add_wait(*syncobj, &wait);
 
 	do {
 		set_current_state(TASK_INTERRUPTIBLE);
@@ -286,7 +291,10 @@ int drm_syncobj_find_fence(struct drm_file *file_private,
 	*fence = wait.fence;
 
 	if (wait.node.next)
-		drm_syncobj_remove_wait(syncobj, &wait);
+		drm_syncobj_remove_wait(*syncobj, &wait);
+
+	if (ret)
+		drm_syncobj_put(*syncobj);
 
 	return ret;
 }
@@ -531,6 +539,7 @@ static int drm_syncobj_export_sync_file(struct drm_file *file_private,
 					int handle, int *p_fd)
 {
 	int ret;
+	struct drm_syncobj *syncobj;
 	struct dma_fence *fence;
 	struct sync_file *sync_file;
 	int fd = get_unused_fd_flags(O_CLOEXEC);
@@ -538,13 +547,14 @@ static int drm_syncobj_export_sync_file(struct drm_file *file_private,
 	if (fd < 0)
 		return fd;
 
-	ret = drm_syncobj_find_fence(file_private, handle, 0, 0, &fence);
+	ret = drm_syncobj_find_fence(file_private, handle, 0, 0, &syncobj, &fence);
 	if (ret)
 		goto err_put_fd;
 
 	sync_file = sync_file_create(fence);
 
 	dma_fence_put(fence);
+	drm_syncobj_put(syncobj);
 
 	if (!sync_file) {
 		ret = -EINVAL;
@@ -682,7 +692,8 @@ drm_syncobj_fd_to_handle_ioctl(struct drm_device *dev, void *data,
 static int drm_syncobj_transfer_to_timeline(struct drm_file *file_private,
 					    struct drm_syncobj_transfer *args)
 {
-	struct drm_syncobj *timeline_syncobj = NULL;
+	struct drm_syncobj *timeline_syncobj;
+	struct drm_syncobj *src_syncobj;
 	struct dma_fence *fence;
 	struct dma_fence_chain *chain;
 	int ret;
@@ -693,7 +704,7 @@ static int drm_syncobj_transfer_to_timeline(struct drm_file *file_private,
 	}
 	ret = drm_syncobj_find_fence(file_private, args->src_handle,
 				     args->src_point, args->flags,
-				     &fence);
+				     &src_syncobj, &fence);
 	if (ret)
 		goto err;
 	chain = kzalloc(sizeof(struct dma_fence_chain), GFP_KERNEL);
@@ -704,6 +715,7 @@ static int drm_syncobj_transfer_to_timeline(struct drm_file *file_private,
 	drm_syncobj_add_point(timeline_syncobj, chain, fence, args->dst_point);
 err1:
 	dma_fence_put(fence);
+	drm_syncobj_put(src_syncobj);
 err:
 	drm_syncobj_put(timeline_syncobj);
 
@@ -714,7 +726,8 @@ static int
 drm_syncobj_transfer_to_binary(struct drm_file *file_private,
 			       struct drm_syncobj_transfer *args)
 {
-	struct drm_syncobj *binary_syncobj = NULL;
+	struct drm_syncobj *binary_syncobj;
+	struct drm_syncobj *src_syncobj;
 	struct dma_fence *fence;
 	int ret;
 
@@ -722,11 +735,13 @@ drm_syncobj_transfer_to_binary(struct drm_file *file_private,
 	if (!binary_syncobj)
 		return -ENOENT;
 	ret = drm_syncobj_find_fence(file_private, args->src_handle,
-				     args->src_point, args->flags, &fence);
+				     args->src_point, args->flags,
+				     &src_syncobj, &fence);
 	if (ret)
 		goto err;
 	drm_syncobj_replace_fence(binary_syncobj, fence);
 	dma_fence_put(fence);
+	drm_syncobj_put(src_syncobj);
 err:
 	drm_syncobj_put(binary_syncobj);
 
diff --git a/drivers/gpu/drm/v3d/v3d_gem.c b/drivers/gpu/drm/v3d/v3d_gem.c
index 27e0f87075d9..26bd3a2e39ca 100644
--- a/drivers/gpu/drm/v3d/v3d_gem.c
+++ b/drivers/gpu/drm/v3d/v3d_gem.c
@@ -431,6 +431,7 @@ v3d_job_init(struct v3d_dev *v3d, struct drm_file *file_priv,
 	     struct v3d_job *job, void (*free)(struct kref *ref),
 	     u32 in_sync)
 {
+	struct drm_syncobj *in_syncobj = NULL;
 	struct dma_fence *in_fence = NULL;
 	int ret;
 
@@ -443,10 +444,12 @@ v3d_job_init(struct v3d_dev *v3d, struct drm_file *file_priv,
 
 	xa_init_flags(&job->deps, XA_FLAGS_ALLOC);
 
-	ret = drm_syncobj_find_fence(file_priv, in_sync, 0, 0, &in_fence);
+	ret = drm_syncobj_find_fence(file_priv, in_sync, 0, 0, &syncobj, &in_fence);
 	if (ret == -EINVAL)
 		goto fail;
 
+	drm_syncobj_put(in_sync);
+
 	ret = drm_gem_fence_array_add(&job->deps, in_fence);
 	if (ret)
 		goto fail;
diff --git a/include/drm/drm_syncobj.h b/include/drm/drm_syncobj.h
index 6cf7243a1dc5..08eca690f783 100644
--- a/include/drm/drm_syncobj.h
+++ b/include/drm/drm_syncobj.h
@@ -121,6 +121,7 @@ void drm_syncobj_replace_fence(struct drm_syncobj *syncobj,
 			       struct dma_fence *fence);
 int drm_syncobj_find_fence(struct drm_file *file_private,
 			   u32 handle, u64 point, u64 flags,
+			   struct drm_syncobj **syncobj,
 			   struct dma_fence **fence);
 void drm_syncobj_free(struct kref *kref);
 int drm_syncobj_create(struct drm_syncobj **out_syncobj, uint32_t flags,
-- 
2.21.0.392.gf8f6787159e

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [PATCH 2/2] drm/i915: add syncobj timeline support
  2019-05-23 11:46 [PATCH 0/2] drm/i915: timeline semaphore support Lionel Landwerlin
  2019-05-23 11:46 ` [PATCH 1/2] drm/syncobj: add an output syncobj parameter to find_fence Lionel Landwerlin
@ 2019-05-23 11:46 ` Lionel Landwerlin
  2019-05-23 11:52   ` Chris Wilson
  2019-05-23 15:44 ` ✗ Fi.CI.CHECKPATCH: warning for drm/i915: timeline semaphore support Patchwork
                   ` (2 subsequent siblings)
  4 siblings, 1 reply; 16+ messages in thread
From: Lionel Landwerlin @ 2019-05-23 11:46 UTC (permalink / raw)
  To: intel-gfx

Introduces a new parameters to execbuf so that we can specify syncobj
handles as well as timeline points.

This is needed for the submission side of the Vulkan timeline
semaphore (VK_KHR_timeline_semaphore extension).

Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
---
 drivers/gpu/drm/i915/i915_drv.c            |   4 +-
 drivers/gpu/drm/i915/i915_gem_execbuffer.c | 190 ++++++++++++++++-----
 include/uapi/drm/i915_drm.h                |  38 ++++-
 3 files changed, 182 insertions(+), 50 deletions(-)

diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c
index 83d2eb9e74cb..d62ddf2fa5b5 100644
--- a/drivers/gpu/drm/i915/i915_drv.c
+++ b/drivers/gpu/drm/i915/i915_drv.c
@@ -444,6 +444,7 @@ static int i915_getparam_ioctl(struct drm_device *dev, void *data,
 	case I915_PARAM_HAS_EXEC_BATCH_FIRST:
 	case I915_PARAM_HAS_EXEC_FENCE_ARRAY:
 	case I915_PARAM_HAS_EXEC_SUBMIT_FENCE:
+	case I915_PARAM_HAS_EXEC_FENCE_ARRAY2:
 		/* For the time being all of these are always true;
 		 * if some supported hardware does not have one of these
 		 * features this value needs to be provided from
@@ -3175,7 +3176,8 @@ static struct drm_driver driver = {
 	 */
 	.driver_features =
 	    DRIVER_GEM | DRIVER_PRIME |
-	    DRIVER_RENDER | DRIVER_MODESET | DRIVER_ATOMIC | DRIVER_SYNCOBJ,
+	    DRIVER_RENDER | DRIVER_MODESET | DRIVER_ATOMIC | DRIVER_SYNCOBJ |
+	    DRIVER_SYNCOBJ_TIMELINE,
 	.release = i915_driver_release,
 	.open = i915_driver_open,
 	.lastclose = i915_driver_lastclose,
diff --git a/drivers/gpu/drm/i915/i915_gem_execbuffer.c b/drivers/gpu/drm/i915/i915_gem_execbuffer.c
index 8b85c91c3ea4..f681533c085a 100644
--- a/drivers/gpu/drm/i915/i915_gem_execbuffer.c
+++ b/drivers/gpu/drm/i915/i915_gem_execbuffer.c
@@ -229,6 +229,13 @@ enum {
  * the batchbuffer in trusted mode, otherwise the ioctl is rejected.
  */
 
+struct i915_drm_dma_fences {
+	struct drm_syncobj *syncobj; /* Use with ptr_mask_bits() */
+	struct dma_fence *dma_fence;
+	u64 value;
+	struct dma_fence_chain *chain_fence;
+};
+
 struct i915_execbuffer {
 	struct drm_i915_private *i915; /** i915 backpointer */
 	struct drm_file *file; /** per-file lookup tables and limits */
@@ -1932,7 +1939,7 @@ static bool i915_gem_check_execbuffer(struct drm_i915_gem_execbuffer2 *exec)
 		return false;
 
 	/* Kernel clipping was a DRI1 misfeature */
-	if (!(exec->flags & I915_EXEC_FENCE_ARRAY)) {
+	if (!(exec->flags & (I915_EXEC_FENCE_ARRAY | I915_EXEC_FENCE_ARRAY2))) {
 		if (exec->num_cliprects || exec->cliprects_ptr)
 			return false;
 	}
@@ -2182,25 +2189,30 @@ eb_select_engine(struct i915_execbuffer *eb,
 }
 
 static void
-__free_fence_array(struct drm_syncobj **fences, unsigned int n)
+__free_fence_array(struct i915_drm_dma_fences *fences, unsigned int n)
 {
-	while (n--)
-		drm_syncobj_put(ptr_mask_bits(fences[n], 2));
+	while (n--) {
+		drm_syncobj_put(ptr_mask_bits(fences[n].syncobj, 2));
+		dma_fence_put(fences[n].dma_fence);
+		kfree(fences[n].chain_fence);
+	}
 	kvfree(fences);
 }
 
-static struct drm_syncobj **
+static struct i915_drm_dma_fences *
 get_fence_array(struct drm_i915_gem_execbuffer2 *args,
 		struct drm_file *file)
 {
 	const unsigned long nfences = args->num_cliprects;
 	struct drm_i915_gem_exec_fence __user *user;
-	struct drm_syncobj **fences;
+	struct drm_i915_gem_exec_fence2 __user *user2;
+	struct i915_drm_dma_fences *fences;
 	unsigned long n;
 	int err;
 
-	if (!(args->flags & I915_EXEC_FENCE_ARRAY))
-		return NULL;
+	if ((args->flags & (I915_EXEC_FENCE_ARRAY | I915_EXEC_FENCE_ARRAY2)) ==
+	    (I915_EXEC_FENCE_ARRAY | I915_EXEC_FENCE_ARRAY2))
+		return ERR_PTR(-EINVAL);
 
 	/* Check multiplication overflow for access_ok() and kvmalloc_array() */
 	BUILD_BUG_ON(sizeof(size_t) > sizeof(unsigned long));
@@ -2209,40 +2221,121 @@ get_fence_array(struct drm_i915_gem_execbuffer2 *args,
 			    SIZE_MAX / sizeof(*fences)))
 		return ERR_PTR(-EINVAL);
 
-	user = u64_to_user_ptr(args->cliprects_ptr);
-	if (!access_ok(user, nfences * sizeof(*user)))
-		return ERR_PTR(-EFAULT);
+	if (args->flags & I915_EXEC_FENCE_ARRAY2) {
+		user2 = u64_to_user_ptr(args->cliprects_ptr);
+		if (!access_ok(user, nfences * sizeof(*user2)))
+			return ERR_PTR(-EFAULT);
+	} else {
+		user = u64_to_user_ptr(args->cliprects_ptr);
+		if (!access_ok(user, nfences * sizeof(*user)))
+			return ERR_PTR(-EFAULT);
+	}
 
 	fences = kvmalloc_array(nfences, sizeof(*fences),
 				__GFP_NOWARN | GFP_KERNEL);
 	if (!fences)
 		return ERR_PTR(-ENOMEM);
 
-	for (n = 0; n < nfences; n++) {
-		struct drm_i915_gem_exec_fence fence;
-		struct drm_syncobj *syncobj;
+	BUILD_BUG_ON(~(ARCH_KMALLOC_MINALIGN - 1) &
+		     ~__I915_EXEC_FENCE_UNKNOWN_FLAGS);
 
-		if (__copy_from_user(&fence, user++, sizeof(fence))) {
-			err = -EFAULT;
-			goto err;
-		}
+	if (args->flags & I915_EXEC_FENCE_ARRAY2) {
+		for (n = 0; n < nfences; n++) {
+			struct drm_i915_gem_exec_fence2 user_fence;
+			struct drm_syncobj *syncobj;
+			struct dma_fence *fence = NULL;
 
-		if (fence.flags & __I915_EXEC_FENCE_UNKNOWN_FLAGS) {
-			err = -EINVAL;
-			goto err;
-		}
+			if (__copy_from_user(&user_fence, user2++, sizeof(user_fence))) {
+				err = -EFAULT;
+				goto err;
+			}
 
-		syncobj = drm_syncobj_find(file, fence.handle);
-		if (!syncobj) {
-			DRM_DEBUG("Invalid syncobj handle provided\n");
-			err = -ENOENT;
-			goto err;
+			if (user_fence.flags & __I915_EXEC_FENCE_UNKNOWN_FLAGS) {
+				err = -EINVAL;
+				goto err;
+			}
+
+			if (user_fence.flags & I915_EXEC_FENCE_WAIT) {
+				err = drm_syncobj_find_fence(
+					file, user_fence.handle, user_fence.value,
+					DRM_SYNCOBJ_WAIT_FLAGS_WAIT_FOR_SUBMIT,
+					&syncobj, &fence);
+				if (err) {
+					DRM_DEBUG("Invalid syncobj handle or timeline value provided\n");
+					goto err;
+				}
+			} else {
+				syncobj = drm_syncobj_find(
+					file, user_fence.handle);
+				if (!syncobj) {
+					err = -ENOENT;
+					DRM_DEBUG("Invalid syncobj handle provided\n");
+					goto err;
+				}
+			}
+
+			if (user_fence.value != 0 && user_fence.flags & I915_EXEC_FENCE_SIGNAL) {
+				fences[n].chain_fence =
+					kmalloc(sizeof(*fences[n].chain_fence),
+						GFP_KERNEL);
+				if (!fences[n].chain_fence) {
+					dma_fence_put(fence);
+					drm_syncobj_put(syncobj);
+					err = -ENOMEM;
+					DRM_DEBUG("Unable to alloc chain_fence\n");
+					goto err;
+				}
+			} else {
+				fences[n].chain_fence = NULL;
+			}
+
+			fences[n].syncobj = ptr_pack_bits(syncobj, user_fence.flags, 2);
+			fences[n].dma_fence = fence;
+			fences[n].value = user_fence.value;
 		}
+	} else {
+		for (n = 0; n < nfences; n++) {
+			struct drm_i915_gem_exec_fence user_fence;
+			struct drm_syncobj *syncobj;
+			struct dma_fence *fence;
+
+			if (__copy_from_user(&user_fence, user++, sizeof(user_fence))) {
+				err = -EFAULT;
+				goto err;
+			}
+
+			if (user_fence.flags & __I915_EXEC_FENCE_UNKNOWN_FLAGS) {
+				err = -EINVAL;
+				goto err;
+			}
 
-		BUILD_BUG_ON(~(ARCH_KMALLOC_MINALIGN - 1) &
-			     ~__I915_EXEC_FENCE_UNKNOWN_FLAGS);
+			/* If we're just signaling a syncobj, no need to get
+			 * the fence.
+			 */
+			if (user_fence.flags & I915_EXEC_FENCE_WAIT) {
+				err = drm_syncobj_find_fence(
+					file, user_fence.handle, 0, 0, &syncobj, &fence);
+				if (err) {
+					DRM_DEBUG("Invalid syncobj handle provided\n");
+					goto err;
+				}
+			} else {
+				syncobj = drm_syncobj_find(file, user_fence.handle);
+				if (!syncobj) {
+					DRM_DEBUG("Invalid syncobj handle provided\n");
+					goto err;
+				}
+				fence = NULL;
+			}
+
+			BUILD_BUG_ON(~(ARCH_KMALLOC_MINALIGN - 1) &
+				     ~__I915_EXEC_FENCE_UNKNOWN_FLAGS);
 
-		fences[n] = ptr_pack_bits(syncobj, fence.flags, 2);
+			fences[n].syncobj = ptr_pack_bits(syncobj, user_fence.flags, 2);
+			fences[n].dma_fence = fence;
+			fences[n].value = 0;
+			fences[n].chain_fence = NULL;
+		}
 	}
 
 	return fences;
@@ -2254,7 +2347,7 @@ get_fence_array(struct drm_i915_gem_execbuffer2 *args,
 
 static void
 put_fence_array(struct drm_i915_gem_execbuffer2 *args,
-		struct drm_syncobj **fences)
+		struct i915_drm_dma_fences *fences)
 {
 	if (fences)
 		__free_fence_array(fences, args->num_cliprects);
@@ -2262,7 +2355,7 @@ put_fence_array(struct drm_i915_gem_execbuffer2 *args,
 
 static int
 await_fence_array(struct i915_execbuffer *eb,
-		  struct drm_syncobj **fences)
+		  struct i915_drm_dma_fences *fences)
 {
 	const unsigned int nfences = eb->args->num_cliprects;
 	unsigned int n;
@@ -2270,19 +2363,14 @@ await_fence_array(struct i915_execbuffer *eb,
 
 	for (n = 0; n < nfences; n++) {
 		struct drm_syncobj *syncobj;
-		struct dma_fence *fence;
 		unsigned int flags;
 
-		syncobj = ptr_unpack_bits(fences[n], &flags, 2);
+		syncobj = ptr_unpack_bits(fences[n].syncobj, &flags, 2);
 		if (!(flags & I915_EXEC_FENCE_WAIT))
 			continue;
 
-		fence = drm_syncobj_fence_get(syncobj);
-		if (!fence)
-			return -EINVAL;
-
-		err = i915_request_await_dma_fence(eb->request, fence);
-		dma_fence_put(fence);
+		err = i915_request_await_dma_fence(eb->request,
+						   fences[n].dma_fence);
 		if (err < 0)
 			return err;
 	}
@@ -2292,7 +2380,7 @@ await_fence_array(struct i915_execbuffer *eb,
 
 static void
 signal_fence_array(struct i915_execbuffer *eb,
-		   struct drm_syncobj **fences)
+		   struct i915_drm_dma_fences *fences)
 {
 	const unsigned int nfences = eb->args->num_cliprects;
 	struct dma_fence * const fence = &eb->request->fence;
@@ -2302,11 +2390,21 @@ signal_fence_array(struct i915_execbuffer *eb,
 		struct drm_syncobj *syncobj;
 		unsigned int flags;
 
-		syncobj = ptr_unpack_bits(fences[n], &flags, 2);
+		syncobj = ptr_unpack_bits(fences[n].syncobj, &flags, 2);
 		if (!(flags & I915_EXEC_FENCE_SIGNAL))
 			continue;
 
-		drm_syncobj_replace_fence(syncobj, fence);
+		if (fences[n].chain_fence) {
+			drm_syncobj_add_point(syncobj, fences[n].chain_fence,
+					      fence, fences[n].value);
+			/*
+			 * The chain's ownership is transfered to the
+			 * timeline.
+			 */
+			fences[n].chain_fence = NULL;
+		} else {
+			drm_syncobj_replace_fence(syncobj, fence);
+		}
 	}
 }
 
@@ -2315,7 +2413,7 @@ i915_gem_do_execbuffer(struct drm_device *dev,
 		       struct drm_file *file,
 		       struct drm_i915_gem_execbuffer2 *args,
 		       struct drm_i915_gem_exec_object2 *exec,
-		       struct drm_syncobj **fences)
+		       struct i915_drm_dma_fences *fences)
 {
 	struct i915_execbuffer eb;
 	struct dma_fence *in_fence = NULL;
@@ -2705,7 +2803,7 @@ i915_gem_execbuffer2_ioctl(struct drm_device *dev, void *data,
 {
 	struct drm_i915_gem_execbuffer2 *args = data;
 	struct drm_i915_gem_exec_object2 *exec2_list;
-	struct drm_syncobj **fences = NULL;
+	struct i915_drm_dma_fences *fences = NULL;
 	const size_t count = args->buffer_count;
 	int err;
 
@@ -2733,7 +2831,7 @@ i915_gem_execbuffer2_ioctl(struct drm_device *dev, void *data,
 		return -EFAULT;
 	}
 
-	if (args->flags & I915_EXEC_FENCE_ARRAY) {
+	if (args->flags & (I915_EXEC_FENCE_ARRAY | I915_EXEC_FENCE_ARRAY2)) {
 		fences = get_fence_array(args, file);
 		if (IS_ERR(fences)) {
 			kvfree(exec2_list);
diff --git a/include/uapi/drm/i915_drm.h b/include/uapi/drm/i915_drm.h
index 328d05e77d9f..eaf7b89360fd 100644
--- a/include/uapi/drm/i915_drm.h
+++ b/include/uapi/drm/i915_drm.h
@@ -610,6 +610,12 @@ typedef struct drm_i915_irq_wait {
  * See I915_EXEC_FENCE_OUT and I915_EXEC_FENCE_SUBMIT.
  */
 #define I915_PARAM_HAS_EXEC_SUBMIT_FENCE 53
+
+/* Query whether DRM_I915_GEM_EXECBUFFER2 supports supplying an array of
+ * drm_i915_gem_exec_fence2 structures.  See I915_EXEC_FENCE_ARRAY.
+ */
+#define I915_PARAM_HAS_EXEC_FENCE_ARRAY2  54
+
 /* Must be kept compact -- no holes and well documented */
 
 typedef struct drm_i915_getparam {
@@ -1006,6 +1012,24 @@ struct drm_i915_gem_exec_fence {
 	__u32 flags;
 };
 
+struct drm_i915_gem_exec_fence2 {
+	/**
+	 * User's handle for a drm_syncobj to wait on or signal.
+	 */
+	__u32 handle;
+
+	/**
+	 * Same flags as drm_i915_gem_exec_fence.
+	 */
+	__u32 flags;
+
+	/**
+	 * A point for a timeline drm_syncobj to wait on or signal. Must be 0
+	 * for a binary drm_syncobj.
+	 */
+	__u64 value;
+};
+
 struct drm_i915_gem_execbuffer2 {
 	/**
 	 * List of gem_exec_object2 structs
@@ -1022,8 +1046,10 @@ struct drm_i915_gem_execbuffer2 {
 	__u32 num_cliprects;
 	/**
 	 * This is a struct drm_clip_rect *cliprects if I915_EXEC_FENCE_ARRAY
-	 * is not set.  If I915_EXEC_FENCE_ARRAY is set, then this is a
-	 * struct drm_i915_gem_exec_fence *fences.
+	 * & I915_EXEC_FENCE_ARRAY2 are not set. If I915_EXEC_FENCE_ARRAY is
+	 * set, then this is a struct drm_i915_gem_exec_fence *fences. If
+	 * I915_EXEC_FENCE_ARRAY2 is set, then this is a struct
+	 * drm_i915_gem_exec_fence2 *fences.
 	 */
 	__u64 cliprects_ptr;
 #define I915_EXEC_RING_MASK              (0x3f)
@@ -1141,7 +1167,13 @@ struct drm_i915_gem_execbuffer2 {
  */
 #define I915_EXEC_FENCE_SUBMIT		(1 << 20)
 
-#define __I915_EXEC_UNKNOWN_FLAGS (-(I915_EXEC_FENCE_SUBMIT << 1))
+/* Setting I915_FENCE_ARRAY2 implies that num_cliprects and cliprects_ptr
+ * define an array of i915_gem_exec_fence2 structures which specify a set of
+ * dma fences to wait upon or signal.
+ */
+#define I915_EXEC_FENCE_ARRAY2   (1<<22)
+
+#define __I915_EXEC_UNKNOWN_FLAGS (-(I915_EXEC_FENCE_ARRAY2<<1))
 
 #define I915_EXEC_CONTEXT_ID_MASK	(0xffffffff)
 #define i915_execbuffer2_set_context_id(eb2, context) \
-- 
2.21.0.392.gf8f6787159e

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply related	[flat|nested] 16+ messages in thread

* Re: [PATCH 2/2] drm/i915: add syncobj timeline support
  2019-05-23 11:46 ` [PATCH 2/2] drm/i915: add syncobj timeline support Lionel Landwerlin
@ 2019-05-23 11:52   ` Chris Wilson
  2019-05-23 13:46     ` Lionel Landwerlin
  0 siblings, 1 reply; 16+ messages in thread
From: Chris Wilson @ 2019-05-23 11:52 UTC (permalink / raw)
  To: Lionel Landwerlin, intel-gfx

Quoting Lionel Landwerlin (2019-05-23 12:46:20)
> -               syncobj = drm_syncobj_find(file, fence.handle);
> -               if (!syncobj) {
> -                       DRM_DEBUG("Invalid syncobj handle provided\n");
> -                       err = -ENOENT;
> -                       goto err;
> +                       if (user_fence.flags & __I915_EXEC_FENCE_UNKNOWN_FLAGS) {
> +                               err = -EINVAL;
> +                               goto err;
> +                       }
> +
> +                       if (user_fence.flags & I915_EXEC_FENCE_WAIT) {
> +                               err = drm_syncobj_find_fence(
> +                                       file, user_fence.handle, user_fence.value,
> +                                       DRM_SYNCOBJ_WAIT_FLAGS_WAIT_FOR_SUBMIT,
> +                                       &syncobj, &fence);

Is this still a synchronous wait? That would be an unfortunate change in
behaviour and antithesis to having a scheduler.
-Chris
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH 1/2] drm/syncobj: add an output syncobj parameter to find_fence
  2019-05-23 11:46 ` [PATCH 1/2] drm/syncobj: add an output syncobj parameter to find_fence Lionel Landwerlin
@ 2019-05-23 12:11   ` Zhou, David(ChunMing)
  2019-05-23 13:35     ` Lionel Landwerlin
  0 siblings, 1 reply; 16+ messages in thread
From: Zhou, David(ChunMing) @ 2019-05-23 12:11 UTC (permalink / raw)
  To: Lionel Landwerlin, intel-gfx
  Cc: Zhou, David(ChunMing), Koenig, Christian, DRI-Devel


[-- Attachment #1.1: Type: text/plain, Size: 9876 bytes --]

can you make the parameter optional? Otherwise looks good to me.

-David

-------- Original Message --------
Subject: [PATCH 1/2] drm/syncobj: add an output syncobj parameter to find_fence
From: Lionel Landwerlin
To: intel-gfx@lists.freedesktop.org
CC: Lionel Landwerlin ,"Koenig, Christian" ,"Zhou, David(ChunMing)" ,Eric Anholt ,DRI-Devel

[CAUTION: External Email]

We would like to get both the fence & the syncobj in i915 rather than
doing 2 calls to drm_syncobj_find() & drm_syncobj_find_fence().

Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
Cc: Christian Koenig <Christian.Koenig@amd.com>
Cc: David(ChunMing) Zhou <David1.Zhou@amd.com>
Cc: Eric Anholt <eric@anholt.net>
CC: DRI-Devel <dri-devel@lists.freedesktop.org>
---
 drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c |  4 ++-
 drivers/gpu/drm/drm_syncobj.c          | 45 +++++++++++++++++---------
 drivers/gpu/drm/v3d/v3d_gem.c          |  5 ++-
 include/drm/drm_syncobj.h              |  1 +
 4 files changed, 38 insertions(+), 17 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
index 2f6239b6be6f..09fde3c73a2c 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
@@ -1124,10 +1124,11 @@ static int amdgpu_syncobj_lookup_and_add_to_sync(struct amdgpu_cs_parser *p,
                                                 uint32_t handle, u64 point,
                                                 u64 flags)
 {
+       struct drm_syncobj *syncobj;
        struct dma_fence *fence;
        int r;

-       r = drm_syncobj_find_fence(p->filp, handle, point, flags, &fence);
+       r = drm_syncobj_find_fence(p->filp, handle, point, flags, &syncobj, &fence);
        if (r) {
                DRM_ERROR("syncobj %u failed to find fence @ %llu (%d)!\n",
                          handle, point, r);
@@ -1136,6 +1137,7 @@ static int amdgpu_syncobj_lookup_and_add_to_sync(struct amdgpu_cs_parser *p,

        r = amdgpu_sync_fence(p->adev, &p->job->sync, fence, true);
        dma_fence_put(fence);
+       drm_syncobj_put(syncobj);

        return r;
 }
diff --git a/drivers/gpu/drm/drm_syncobj.c b/drivers/gpu/drm/drm_syncobj.c
index 3d400905100b..f2fd0c1fb1d3 100644
--- a/drivers/gpu/drm/drm_syncobj.c
+++ b/drivers/gpu/drm/drm_syncobj.c
@@ -222,29 +222,32 @@ static void drm_syncobj_assign_null_handle(struct drm_syncobj *syncobj)
  * @handle: sync object handle to lookup.
  * @point: timeline point
  * @flags: DRM_SYNCOBJ_WAIT_FLAGS_WAIT_FOR_SUBMIT or not
+ * @syncobj: out parameter for the syncobj
  * @fence: out parameter for the fence
  *
  * This is just a convenience function that combines drm_syncobj_find() and
  * drm_syncobj_fence_get().
  *
- * Returns 0 on success or a negative error value on failure. On success @fence
- * contains a reference to the fence, which must be released by calling
- * dma_fence_put().
+ * Returns 0 on success or a negative error value on failure. On
+ * success @syncobj and @fence contains a reference respectively to
+ * the syncobj and to the fence, which must be released by calling
+ * respectively drm_syncobj_put() and dma_fence_put().
  */
 int drm_syncobj_find_fence(struct drm_file *file_private,
                           u32 handle, u64 point, u64 flags,
+                          struct drm_syncobj **syncobj,
                           struct dma_fence **fence)
 {
-       struct drm_syncobj *syncobj = drm_syncobj_find(file_private, handle);
        struct syncobj_wait_entry wait;
        u64 timeout = nsecs_to_jiffies64(DRM_SYNCOBJ_WAIT_FOR_SUBMIT_TIMEOUT);
        int ret;

-       if (!syncobj)
+       *syncobj = drm_syncobj_find(file_private, handle);
+
+       if (!(*syncobj))
                return -ENOENT;

-       *fence = drm_syncobj_fence_get(syncobj);
-       drm_syncobj_put(syncobj);
+       *fence = drm_syncobj_fence_get(*syncobj);

        if (*fence) {
                ret = dma_fence_chain_find_seqno(fence, point);
@@ -255,13 +258,15 @@ int drm_syncobj_find_fence(struct drm_file *file_private,
                ret = -EINVAL;
        }

-       if (!(flags & DRM_SYNCOBJ_WAIT_FLAGS_WAIT_FOR_SUBMIT))
+       if (!(flags & DRM_SYNCOBJ_WAIT_FLAGS_WAIT_FOR_SUBMIT)) {
+               drm_syncobj_put(*syncobj);
                return ret;
+       }

        memset(&wait, 0, sizeof(wait));
        wait.task = current;
        wait.point = point;
-       drm_syncobj_fence_add_wait(syncobj, &wait);
+       drm_syncobj_fence_add_wait(*syncobj, &wait);

        do {
                set_current_state(TASK_INTERRUPTIBLE);
@@ -286,7 +291,10 @@ int drm_syncobj_find_fence(struct drm_file *file_private,
        *fence = wait.fence;

        if (wait.node.next)
-               drm_syncobj_remove_wait(syncobj, &wait);
+               drm_syncobj_remove_wait(*syncobj, &wait);
+
+       if (ret)
+               drm_syncobj_put(*syncobj);

        return ret;
 }
@@ -531,6 +539,7 @@ static int drm_syncobj_export_sync_file(struct drm_file *file_private,
                                        int handle, int *p_fd)
 {
        int ret;
+       struct drm_syncobj *syncobj;
        struct dma_fence *fence;
        struct sync_file *sync_file;
        int fd = get_unused_fd_flags(O_CLOEXEC);
@@ -538,13 +547,14 @@ static int drm_syncobj_export_sync_file(struct drm_file *file_private,
        if (fd < 0)
                return fd;

-       ret = drm_syncobj_find_fence(file_private, handle, 0, 0, &fence);
+       ret = drm_syncobj_find_fence(file_private, handle, 0, 0, &syncobj, &fence);
        if (ret)
                goto err_put_fd;

        sync_file = sync_file_create(fence);

        dma_fence_put(fence);
+       drm_syncobj_put(syncobj);

        if (!sync_file) {
                ret = -EINVAL;
@@ -682,7 +692,8 @@ drm_syncobj_fd_to_handle_ioctl(struct drm_device *dev, void *data,
 static int drm_syncobj_transfer_to_timeline(struct drm_file *file_private,
                                            struct drm_syncobj_transfer *args)
 {
-       struct drm_syncobj *timeline_syncobj = NULL;
+       struct drm_syncobj *timeline_syncobj;
+       struct drm_syncobj *src_syncobj;
        struct dma_fence *fence;
        struct dma_fence_chain *chain;
        int ret;
@@ -693,7 +704,7 @@ static int drm_syncobj_transfer_to_timeline(struct drm_file *file_private,
        }
        ret = drm_syncobj_find_fence(file_private, args->src_handle,
                                     args->src_point, args->flags,
-                                    &fence);
+                                    &src_syncobj, &fence);
        if (ret)
                goto err;
        chain = kzalloc(sizeof(struct dma_fence_chain), GFP_KERNEL);
@@ -704,6 +715,7 @@ static int drm_syncobj_transfer_to_timeline(struct drm_file *file_private,
        drm_syncobj_add_point(timeline_syncobj, chain, fence, args->dst_point);
 err1:
        dma_fence_put(fence);
+       drm_syncobj_put(src_syncobj);
 err:
        drm_syncobj_put(timeline_syncobj);

@@ -714,7 +726,8 @@ static int
 drm_syncobj_transfer_to_binary(struct drm_file *file_private,
                               struct drm_syncobj_transfer *args)
 {
-       struct drm_syncobj *binary_syncobj = NULL;
+       struct drm_syncobj *binary_syncobj;
+       struct drm_syncobj *src_syncobj;
        struct dma_fence *fence;
        int ret;

@@ -722,11 +735,13 @@ drm_syncobj_transfer_to_binary(struct drm_file *file_private,
        if (!binary_syncobj)
                return -ENOENT;
        ret = drm_syncobj_find_fence(file_private, args->src_handle,
-                                    args->src_point, args->flags, &fence);
+                                    args->src_point, args->flags,
+                                    &src_syncobj, &fence);
        if (ret)
                goto err;
        drm_syncobj_replace_fence(binary_syncobj, fence);
        dma_fence_put(fence);
+       drm_syncobj_put(src_syncobj);
 err:
        drm_syncobj_put(binary_syncobj);

diff --git a/drivers/gpu/drm/v3d/v3d_gem.c b/drivers/gpu/drm/v3d/v3d_gem.c
index 27e0f87075d9..26bd3a2e39ca 100644
--- a/drivers/gpu/drm/v3d/v3d_gem.c
+++ b/drivers/gpu/drm/v3d/v3d_gem.c
@@ -431,6 +431,7 @@ v3d_job_init(struct v3d_dev *v3d, struct drm_file *file_priv,
             struct v3d_job *job, void (*free)(struct kref *ref),
             u32 in_sync)
 {
+       struct drm_syncobj *in_syncobj = NULL;
        struct dma_fence *in_fence = NULL;
        int ret;

@@ -443,10 +444,12 @@ v3d_job_init(struct v3d_dev *v3d, struct drm_file *file_priv,

        xa_init_flags(&job->deps, XA_FLAGS_ALLOC);

-       ret = drm_syncobj_find_fence(file_priv, in_sync, 0, 0, &in_fence);
+       ret = drm_syncobj_find_fence(file_priv, in_sync, 0, 0, &syncobj, &in_fence);
        if (ret == -EINVAL)
                goto fail;

+       drm_syncobj_put(in_sync);
+
        ret = drm_gem_fence_array_add(&job->deps, in_fence);
        if (ret)
                goto fail;
diff --git a/include/drm/drm_syncobj.h b/include/drm/drm_syncobj.h
index 6cf7243a1dc5..08eca690f783 100644
--- a/include/drm/drm_syncobj.h
+++ b/include/drm/drm_syncobj.h
@@ -121,6 +121,7 @@ void drm_syncobj_replace_fence(struct drm_syncobj *syncobj,
                               struct dma_fence *fence);
 int drm_syncobj_find_fence(struct drm_file *file_private,
                           u32 handle, u64 point, u64 flags,
+                          struct drm_syncobj **syncobj,
                           struct dma_fence **fence);
 void drm_syncobj_free(struct kref *kref);
 int drm_syncobj_create(struct drm_syncobj **out_syncobj, uint32_t flags,
--
2.21.0.392.gf8f6787159e


[-- Attachment #1.2: Type: text/html, Size: 19543 bytes --]

[-- Attachment #2: Type: text/plain, Size: 159 bytes --]

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply related	[flat|nested] 16+ messages in thread

* Re: [PATCH 1/2] drm/syncobj: add an output syncobj parameter to find_fence
  2019-05-23 12:11   ` Zhou, David(ChunMing)
@ 2019-05-23 13:35     ` Lionel Landwerlin
  2019-05-23 13:37       ` Lionel Landwerlin
  0 siblings, 1 reply; 16+ messages in thread
From: Lionel Landwerlin @ 2019-05-23 13:35 UTC (permalink / raw)
  To: Zhou, David(ChunMing), intel-gfx; +Cc: Koenig, Christian, DRI-Devel


[-- Attachment #1.1: Type: text/plain, Size: 10246 bytes --]

Sure

-Lionel

On 23/05/2019 13:11, Zhou, David(ChunMing) wrote:
> can you make the parameter optional? Otherwise looks good to me.
>
> -David
>
> -------- Original Message --------
> Subject: [PATCH 1/2] drm/syncobj: add an output syncobj parameter to 
> find_fence
> From: Lionel Landwerlin
> To: intel-gfx@lists.freedesktop.org
> CC: Lionel Landwerlin ,"Koenig, Christian" ,"Zhou, David(ChunMing)" 
> ,Eric Anholt ,DRI-Devel
>
> [CAUTION: External Email]
>
> We would like to get both the fence & the syncobj in i915 rather than
> doing 2 calls to drm_syncobj_find() & drm_syncobj_find_fence().
>
> Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
> Cc: Christian Koenig <Christian.Koenig@amd.com>
> Cc: David(ChunMing) Zhou <David1.Zhou@amd.com>
> Cc: Eric Anholt <eric@anholt.net>
> CC: DRI-Devel <dri-devel@lists.freedesktop.org>
> ---
>  drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c |  4 ++-
>  drivers/gpu/drm/drm_syncobj.c          | 45 +++++++++++++++++---------
>  drivers/gpu/drm/v3d/v3d_gem.c          |  5 ++-
>  include/drm/drm_syncobj.h              |  1 +
>  4 files changed, 38 insertions(+), 17 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c 
> b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
> index 2f6239b6be6f..09fde3c73a2c 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
> @@ -1124,10 +1124,11 @@ static int 
> amdgpu_syncobj_lookup_and_add_to_sync(struct amdgpu_cs_parser *p,
>                                                  uint32_t handle, u64 
> point,
>                                                  u64 flags)
>  {
> +       struct drm_syncobj *syncobj;
>         struct dma_fence *fence;
>         int r;
>
> -       r = drm_syncobj_find_fence(p->filp, handle, point, flags, &fence);
> +       r = drm_syncobj_find_fence(p->filp, handle, point, flags, 
> &syncobj, &fence);
>         if (r) {
>                 DRM_ERROR("syncobj %u failed to find fence @ %llu 
> (%d)!\n",
>                           handle, point, r);
> @@ -1136,6 +1137,7 @@ static int 
> amdgpu_syncobj_lookup_and_add_to_sync(struct amdgpu_cs_parser *p,
>
>         r = amdgpu_sync_fence(p->adev, &p->job->sync, fence, true);
>         dma_fence_put(fence);
> +       drm_syncobj_put(syncobj);
>
>         return r;
>  }
> diff --git a/drivers/gpu/drm/drm_syncobj.c b/drivers/gpu/drm/drm_syncobj.c
> index 3d400905100b..f2fd0c1fb1d3 100644
> --- a/drivers/gpu/drm/drm_syncobj.c
> +++ b/drivers/gpu/drm/drm_syncobj.c
> @@ -222,29 +222,32 @@ static void 
> drm_syncobj_assign_null_handle(struct drm_syncobj *syncobj)
>   * @handle: sync object handle to lookup.
>   * @point: timeline point
>   * @flags: DRM_SYNCOBJ_WAIT_FLAGS_WAIT_FOR_SUBMIT or not
> + * @syncobj: out parameter for the syncobj
>   * @fence: out parameter for the fence
>   *
>   * This is just a convenience function that combines 
> drm_syncobj_find() and
>   * drm_syncobj_fence_get().
>   *
> - * Returns 0 on success or a negative error value on failure. On 
> success @fence
> - * contains a reference to the fence, which must be released by calling
> - * dma_fence_put().
> + * Returns 0 on success or a negative error value on failure. On
> + * success @syncobj and @fence contains a reference respectively to
> + * the syncobj and to the fence, which must be released by calling
> + * respectively drm_syncobj_put() and dma_fence_put().
>   */
>  int drm_syncobj_find_fence(struct drm_file *file_private,
>                            u32 handle, u64 point, u64 flags,
> +                          struct drm_syncobj **syncobj,
>                            struct dma_fence **fence)
>  {
> -       struct drm_syncobj *syncobj = drm_syncobj_find(file_private, 
> handle);
>         struct syncobj_wait_entry wait;
>         u64 timeout = 
> nsecs_to_jiffies64(DRM_SYNCOBJ_WAIT_FOR_SUBMIT_TIMEOUT);
>         int ret;
>
> -       if (!syncobj)
> +       *syncobj = drm_syncobj_find(file_private, handle);
> +
> +       if (!(*syncobj))
>                 return -ENOENT;
>
> -       *fence = drm_syncobj_fence_get(syncobj);
> -       drm_syncobj_put(syncobj);
> +       *fence = drm_syncobj_fence_get(*syncobj);
>
>         if (*fence) {
>                 ret = dma_fence_chain_find_seqno(fence, point);
> @@ -255,13 +258,15 @@ int drm_syncobj_find_fence(struct drm_file 
> *file_private,
>                 ret = -EINVAL;
>         }
>
> -       if (!(flags & DRM_SYNCOBJ_WAIT_FLAGS_WAIT_FOR_SUBMIT))
> +       if (!(flags & DRM_SYNCOBJ_WAIT_FLAGS_WAIT_FOR_SUBMIT)) {
> +               drm_syncobj_put(*syncobj);
>                 return ret;
> +       }
>
>         memset(&wait, 0, sizeof(wait));
>         wait.task = current;
>         wait.point = point;
> -       drm_syncobj_fence_add_wait(syncobj, &wait);
> +       drm_syncobj_fence_add_wait(*syncobj, &wait);
>
>         do {
>                 set_current_state(TASK_INTERRUPTIBLE);
> @@ -286,7 +291,10 @@ int drm_syncobj_find_fence(struct drm_file 
> *file_private,
>         *fence = wait.fence;
>
>         if (wait.node.next)
> -               drm_syncobj_remove_wait(syncobj, &wait);
> +               drm_syncobj_remove_wait(*syncobj, &wait);
> +
> +       if (ret)
> +               drm_syncobj_put(*syncobj);
>
>         return ret;
>  }
> @@ -531,6 +539,7 @@ static int drm_syncobj_export_sync_file(struct 
> drm_file *file_private,
>                                         int handle, int *p_fd)
>  {
>         int ret;
> +       struct drm_syncobj *syncobj;
>         struct dma_fence *fence;
>         struct sync_file *sync_file;
>         int fd = get_unused_fd_flags(O_CLOEXEC);
> @@ -538,13 +547,14 @@ static int drm_syncobj_export_sync_file(struct 
> drm_file *file_private,
>         if (fd < 0)
>                 return fd;
>
> -       ret = drm_syncobj_find_fence(file_private, handle, 0, 0, &fence);
> +       ret = drm_syncobj_find_fence(file_private, handle, 0, 0, 
> &syncobj, &fence);
>         if (ret)
>                 goto err_put_fd;
>
>         sync_file = sync_file_create(fence);
>
>         dma_fence_put(fence);
> +       drm_syncobj_put(syncobj);
>
>         if (!sync_file) {
>                 ret = -EINVAL;
> @@ -682,7 +692,8 @@ drm_syncobj_fd_to_handle_ioctl(struct drm_device 
> *dev, void *data,
>  static int drm_syncobj_transfer_to_timeline(struct drm_file 
> *file_private,
>                                             struct 
> drm_syncobj_transfer *args)
>  {
> -       struct drm_syncobj *timeline_syncobj = NULL;
> +       struct drm_syncobj *timeline_syncobj;
> +       struct drm_syncobj *src_syncobj;
>         struct dma_fence *fence;
>         struct dma_fence_chain *chain;
>         int ret;
> @@ -693,7 +704,7 @@ static int drm_syncobj_transfer_to_timeline(struct 
> drm_file *file_private,
>         }
>         ret = drm_syncobj_find_fence(file_private, args->src_handle,
>                                      args->src_point, args->flags,
> -                                    &fence);
> +                                    &src_syncobj, &fence);
>         if (ret)
>                 goto err;
>         chain = kzalloc(sizeof(struct dma_fence_chain), GFP_KERNEL);
> @@ -704,6 +715,7 @@ static int drm_syncobj_transfer_to_timeline(struct 
> drm_file *file_private,
>         drm_syncobj_add_point(timeline_syncobj, chain, fence, 
> args->dst_point);
>  err1:
>         dma_fence_put(fence);
> +       drm_syncobj_put(src_syncobj);
>  err:
>         drm_syncobj_put(timeline_syncobj);
>
> @@ -714,7 +726,8 @@ static int
>  drm_syncobj_transfer_to_binary(struct drm_file *file_private,
>                                struct drm_syncobj_transfer *args)
>  {
> -       struct drm_syncobj *binary_syncobj = NULL;
> +       struct drm_syncobj *binary_syncobj;
> +       struct drm_syncobj *src_syncobj;
>         struct dma_fence *fence;
>         int ret;
>
> @@ -722,11 +735,13 @@ drm_syncobj_transfer_to_binary(struct drm_file 
> *file_private,
>         if (!binary_syncobj)
>                 return -ENOENT;
>         ret = drm_syncobj_find_fence(file_private, args->src_handle,
> -                                    args->src_point, args->flags, 
> &fence);
> +                                    args->src_point, args->flags,
> +                                    &src_syncobj, &fence);
>         if (ret)
>                 goto err;
>         drm_syncobj_replace_fence(binary_syncobj, fence);
>         dma_fence_put(fence);
> +       drm_syncobj_put(src_syncobj);
>  err:
>         drm_syncobj_put(binary_syncobj);
>
> diff --git a/drivers/gpu/drm/v3d/v3d_gem.c b/drivers/gpu/drm/v3d/v3d_gem.c
> index 27e0f87075d9..26bd3a2e39ca 100644
> --- a/drivers/gpu/drm/v3d/v3d_gem.c
> +++ b/drivers/gpu/drm/v3d/v3d_gem.c
> @@ -431,6 +431,7 @@ v3d_job_init(struct v3d_dev *v3d, struct drm_file 
> *file_priv,
>              struct v3d_job *job, void (*free)(struct kref *ref),
>              u32 in_sync)
>  {
> +       struct drm_syncobj *in_syncobj = NULL;
>         struct dma_fence *in_fence = NULL;
>         int ret;
>
> @@ -443,10 +444,12 @@ v3d_job_init(struct v3d_dev *v3d, struct 
> drm_file *file_priv,
>
>         xa_init_flags(&job->deps, XA_FLAGS_ALLOC);
>
> -       ret = drm_syncobj_find_fence(file_priv, in_sync, 0, 0, &in_fence);
> +       ret = drm_syncobj_find_fence(file_priv, in_sync, 0, 0, 
> &syncobj, &in_fence);
>         if (ret == -EINVAL)
>                 goto fail;
>
> +       drm_syncobj_put(in_sync);
> +
>         ret = drm_gem_fence_array_add(&job->deps, in_fence);
>         if (ret)
>                 goto fail;
> diff --git a/include/drm/drm_syncobj.h b/include/drm/drm_syncobj.h
> index 6cf7243a1dc5..08eca690f783 100644
> --- a/include/drm/drm_syncobj.h
> +++ b/include/drm/drm_syncobj.h
> @@ -121,6 +121,7 @@ void drm_syncobj_replace_fence(struct drm_syncobj 
> *syncobj,
>                                struct dma_fence *fence);
>  int drm_syncobj_find_fence(struct drm_file *file_private,
>                            u32 handle, u64 point, u64 flags,
> +                          struct drm_syncobj **syncobj,
>                            struct dma_fence **fence);
>  void drm_syncobj_free(struct kref *kref);
>  int drm_syncobj_create(struct drm_syncobj **out_syncobj, uint32_t flags,
> --
> 2.21.0.392.gf8f6787159e
>


[-- Attachment #1.2: Type: text/html, Size: 16107 bytes --]

[-- Attachment #2: Type: text/plain, Size: 159 bytes --]

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH 1/2] drm/syncobj: add an output syncobj parameter to find_fence
  2019-05-23 13:35     ` Lionel Landwerlin
@ 2019-05-23 13:37       ` Lionel Landwerlin
  0 siblings, 0 replies; 16+ messages in thread
From: Lionel Landwerlin @ 2019-05-23 13:37 UTC (permalink / raw)
  To: Zhou, David(ChunMing), intel-gfx; +Cc: Koenig, Christian, DRI-Devel


[-- Attachment #1.1: Type: text/plain, Size: 10863 bytes --]

I should mentioned that this is going to make the find_fence() function 
a fair bit more complex :)

On 23/05/2019 14:35, Lionel Landwerlin wrote:
> Sure
>
> -Lionel
>
> On 23/05/2019 13:11, Zhou, David(ChunMing) wrote:
>> can you make the parameter optional? Otherwise looks good to me.
>>
>> -David
>>
>> -------- Original Message --------
>> Subject: [PATCH 1/2] drm/syncobj: add an output syncobj parameter to 
>> find_fence
>> From: Lionel Landwerlin
>> To: intel-gfx@lists.freedesktop.org
>> CC: Lionel Landwerlin ,"Koenig, Christian" ,"Zhou, David(ChunMing)" 
>> ,Eric Anholt ,DRI-Devel
>>
>> [CAUTION: External Email]
>>
>> We would like to get both the fence & the syncobj in i915 rather than
>> doing 2 calls to drm_syncobj_find() & drm_syncobj_find_fence().
>>
>> Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
>> Cc: Christian Koenig <Christian.Koenig@amd.com>
>> Cc: David(ChunMing) Zhou <David1.Zhou@amd.com>
>> Cc: Eric Anholt <eric@anholt.net>
>> CC: DRI-Devel <dri-devel@lists.freedesktop.org>
>> ---
>>  drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c |  4 ++-
>>  drivers/gpu/drm/drm_syncobj.c          | 45 +++++++++++++++++---------
>>  drivers/gpu/drm/v3d/v3d_gem.c          |  5 ++-
>>  include/drm/drm_syncobj.h              |  1 +
>>  4 files changed, 38 insertions(+), 17 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c 
>> b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
>> index 2f6239b6be6f..09fde3c73a2c 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
>> @@ -1124,10 +1124,11 @@ static int 
>> amdgpu_syncobj_lookup_and_add_to_sync(struct amdgpu_cs_parser *p,
>>                                                  uint32_t handle, u64 
>> point,
>>                                                  u64 flags)
>>  {
>> +       struct drm_syncobj *syncobj;
>>         struct dma_fence *fence;
>>         int r;
>>
>> -       r = drm_syncobj_find_fence(p->filp, handle, point, flags, 
>> &fence);
>> +       r = drm_syncobj_find_fence(p->filp, handle, point, flags, 
>> &syncobj, &fence);
>>         if (r) {
>>                 DRM_ERROR("syncobj %u failed to find fence @ %llu 
>> (%d)!\n",
>>                           handle, point, r);
>> @@ -1136,6 +1137,7 @@ static int 
>> amdgpu_syncobj_lookup_and_add_to_sync(struct amdgpu_cs_parser *p,
>>
>>         r = amdgpu_sync_fence(p->adev, &p->job->sync, fence, true);
>>         dma_fence_put(fence);
>> +       drm_syncobj_put(syncobj);
>>
>>         return r;
>>  }
>> diff --git a/drivers/gpu/drm/drm_syncobj.c 
>> b/drivers/gpu/drm/drm_syncobj.c
>> index 3d400905100b..f2fd0c1fb1d3 100644
>> --- a/drivers/gpu/drm/drm_syncobj.c
>> +++ b/drivers/gpu/drm/drm_syncobj.c
>> @@ -222,29 +222,32 @@ static void 
>> drm_syncobj_assign_null_handle(struct drm_syncobj *syncobj)
>>   * @handle: sync object handle to lookup.
>>   * @point: timeline point
>>   * @flags: DRM_SYNCOBJ_WAIT_FLAGS_WAIT_FOR_SUBMIT or not
>> + * @syncobj: out parameter for the syncobj
>>   * @fence: out parameter for the fence
>>   *
>>   * This is just a convenience function that combines 
>> drm_syncobj_find() and
>>   * drm_syncobj_fence_get().
>>   *
>> - * Returns 0 on success or a negative error value on failure. On 
>> success @fence
>> - * contains a reference to the fence, which must be released by calling
>> - * dma_fence_put().
>> + * Returns 0 on success or a negative error value on failure. On
>> + * success @syncobj and @fence contains a reference respectively to
>> + * the syncobj and to the fence, which must be released by calling
>> + * respectively drm_syncobj_put() and dma_fence_put().
>>   */
>>  int drm_syncobj_find_fence(struct drm_file *file_private,
>>                            u32 handle, u64 point, u64 flags,
>> +                          struct drm_syncobj **syncobj,
>>                            struct dma_fence **fence)
>>  {
>> -       struct drm_syncobj *syncobj = drm_syncobj_find(file_private, 
>> handle);
>>         struct syncobj_wait_entry wait;
>>         u64 timeout = 
>> nsecs_to_jiffies64(DRM_SYNCOBJ_WAIT_FOR_SUBMIT_TIMEOUT);
>>         int ret;
>>
>> -       if (!syncobj)
>> +       *syncobj = drm_syncobj_find(file_private, handle);
>> +
>> +       if (!(*syncobj))
>>                 return -ENOENT;
>>
>> -       *fence = drm_syncobj_fence_get(syncobj);
>> -       drm_syncobj_put(syncobj);
>> +       *fence = drm_syncobj_fence_get(*syncobj);
>>
>>         if (*fence) {
>>                 ret = dma_fence_chain_find_seqno(fence, point);
>> @@ -255,13 +258,15 @@ int drm_syncobj_find_fence(struct drm_file 
>> *file_private,
>>                 ret = -EINVAL;
>>         }
>>
>> -       if (!(flags & DRM_SYNCOBJ_WAIT_FLAGS_WAIT_FOR_SUBMIT))
>> +       if (!(flags & DRM_SYNCOBJ_WAIT_FLAGS_WAIT_FOR_SUBMIT)) {
>> +               drm_syncobj_put(*syncobj);
>>                 return ret;
>> +       }
>>
>>         memset(&wait, 0, sizeof(wait));
>>         wait.task = current;
>>         wait.point = point;
>> -       drm_syncobj_fence_add_wait(syncobj, &wait);
>> +       drm_syncobj_fence_add_wait(*syncobj, &wait);
>>
>>         do {
>>                 set_current_state(TASK_INTERRUPTIBLE);
>> @@ -286,7 +291,10 @@ int drm_syncobj_find_fence(struct drm_file 
>> *file_private,
>>         *fence = wait.fence;
>>
>>         if (wait.node.next)
>> -               drm_syncobj_remove_wait(syncobj, &wait);
>> +               drm_syncobj_remove_wait(*syncobj, &wait);
>> +
>> +       if (ret)
>> +               drm_syncobj_put(*syncobj);
>>
>>         return ret;
>>  }
>> @@ -531,6 +539,7 @@ static int drm_syncobj_export_sync_file(struct 
>> drm_file *file_private,
>>                                         int handle, int *p_fd)
>>  {
>>         int ret;
>> +       struct drm_syncobj *syncobj;
>>         struct dma_fence *fence;
>>         struct sync_file *sync_file;
>>         int fd = get_unused_fd_flags(O_CLOEXEC);
>> @@ -538,13 +547,14 @@ static int drm_syncobj_export_sync_file(struct 
>> drm_file *file_private,
>>         if (fd < 0)
>>                 return fd;
>>
>> -       ret = drm_syncobj_find_fence(file_private, handle, 0, 0, &fence);
>> +       ret = drm_syncobj_find_fence(file_private, handle, 0, 0, 
>> &syncobj, &fence);
>>         if (ret)
>>                 goto err_put_fd;
>>
>>         sync_file = sync_file_create(fence);
>>
>>         dma_fence_put(fence);
>> +       drm_syncobj_put(syncobj);
>>
>>         if (!sync_file) {
>>                 ret = -EINVAL;
>> @@ -682,7 +692,8 @@ drm_syncobj_fd_to_handle_ioctl(struct drm_device 
>> *dev, void *data,
>>  static int drm_syncobj_transfer_to_timeline(struct drm_file 
>> *file_private,
>>                                             struct 
>> drm_syncobj_transfer *args)
>>  {
>> -       struct drm_syncobj *timeline_syncobj = NULL;
>> +       struct drm_syncobj *timeline_syncobj;
>> +       struct drm_syncobj *src_syncobj;
>>         struct dma_fence *fence;
>>         struct dma_fence_chain *chain;
>>         int ret;
>> @@ -693,7 +704,7 @@ static int 
>> drm_syncobj_transfer_to_timeline(struct drm_file *file_private,
>>         }
>>         ret = drm_syncobj_find_fence(file_private, args->src_handle,
>>                                      args->src_point, args->flags,
>> -                                    &fence);
>> +                                    &src_syncobj, &fence);
>>         if (ret)
>>                 goto err;
>>         chain = kzalloc(sizeof(struct dma_fence_chain), GFP_KERNEL);
>> @@ -704,6 +715,7 @@ static int 
>> drm_syncobj_transfer_to_timeline(struct drm_file *file_private,
>>         drm_syncobj_add_point(timeline_syncobj, chain, fence, 
>> args->dst_point);
>>  err1:
>>         dma_fence_put(fence);
>> +       drm_syncobj_put(src_syncobj);
>>  err:
>>         drm_syncobj_put(timeline_syncobj);
>>
>> @@ -714,7 +726,8 @@ static int
>>  drm_syncobj_transfer_to_binary(struct drm_file *file_private,
>>                                struct drm_syncobj_transfer *args)
>>  {
>> -       struct drm_syncobj *binary_syncobj = NULL;
>> +       struct drm_syncobj *binary_syncobj;
>> +       struct drm_syncobj *src_syncobj;
>>         struct dma_fence *fence;
>>         int ret;
>>
>> @@ -722,11 +735,13 @@ drm_syncobj_transfer_to_binary(struct drm_file 
>> *file_private,
>>         if (!binary_syncobj)
>>                 return -ENOENT;
>>         ret = drm_syncobj_find_fence(file_private, args->src_handle,
>> -                                    args->src_point, args->flags, 
>> &fence);
>> +                                    args->src_point, args->flags,
>> +                                    &src_syncobj, &fence);
>>         if (ret)
>>                 goto err;
>>         drm_syncobj_replace_fence(binary_syncobj, fence);
>>         dma_fence_put(fence);
>> +       drm_syncobj_put(src_syncobj);
>>  err:
>>         drm_syncobj_put(binary_syncobj);
>>
>> diff --git a/drivers/gpu/drm/v3d/v3d_gem.c 
>> b/drivers/gpu/drm/v3d/v3d_gem.c
>> index 27e0f87075d9..26bd3a2e39ca 100644
>> --- a/drivers/gpu/drm/v3d/v3d_gem.c
>> +++ b/drivers/gpu/drm/v3d/v3d_gem.c
>> @@ -431,6 +431,7 @@ v3d_job_init(struct v3d_dev *v3d, struct drm_file 
>> *file_priv,
>>              struct v3d_job *job, void (*free)(struct kref *ref),
>>              u32 in_sync)
>>  {
>> +       struct drm_syncobj *in_syncobj = NULL;
>>         struct dma_fence *in_fence = NULL;
>>         int ret;
>>
>> @@ -443,10 +444,12 @@ v3d_job_init(struct v3d_dev *v3d, struct 
>> drm_file *file_priv,
>>
>>         xa_init_flags(&job->deps, XA_FLAGS_ALLOC);
>>
>> -       ret = drm_syncobj_find_fence(file_priv, in_sync, 0, 0, 
>> &in_fence);
>> +       ret = drm_syncobj_find_fence(file_priv, in_sync, 0, 0, 
>> &syncobj, &in_fence);
>>         if (ret == -EINVAL)
>>                 goto fail;
>>
>> +       drm_syncobj_put(in_sync);
>> +
>>         ret = drm_gem_fence_array_add(&job->deps, in_fence);
>>         if (ret)
>>                 goto fail;
>> diff --git a/include/drm/drm_syncobj.h b/include/drm/drm_syncobj.h
>> index 6cf7243a1dc5..08eca690f783 100644
>> --- a/include/drm/drm_syncobj.h
>> +++ b/include/drm/drm_syncobj.h
>> @@ -121,6 +121,7 @@ void drm_syncobj_replace_fence(struct drm_syncobj 
>> *syncobj,
>>                                struct dma_fence *fence);
>>  int drm_syncobj_find_fence(struct drm_file *file_private,
>>                            u32 handle, u64 point, u64 flags,
>> +                          struct drm_syncobj **syncobj,
>>                            struct dma_fence **fence);
>>  void drm_syncobj_free(struct kref *kref);
>>  int drm_syncobj_create(struct drm_syncobj **out_syncobj, uint32_t flags,
>> --
>> 2.21.0.392.gf8f6787159e
>>
>
>
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/intel-gfx



[-- Attachment #1.2: Type: text/html, Size: 18055 bytes --]

[-- Attachment #2: Type: text/plain, Size: 159 bytes --]

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH 2/2] drm/i915: add syncobj timeline support
  2019-05-23 11:52   ` Chris Wilson
@ 2019-05-23 13:46     ` Lionel Landwerlin
  2019-05-23 13:59       ` Chris Wilson
  0 siblings, 1 reply; 16+ messages in thread
From: Lionel Landwerlin @ 2019-05-23 13:46 UTC (permalink / raw)
  To: Chris Wilson, intel-gfx

On 23/05/2019 12:52, Chris Wilson wrote:
> Quoting Lionel Landwerlin (2019-05-23 12:46:20)
>> -               syncobj = drm_syncobj_find(file, fence.handle);
>> -               if (!syncobj) {
>> -                       DRM_DEBUG("Invalid syncobj handle provided\n");
>> -                       err = -ENOENT;
>> -                       goto err;
>> +                       if (user_fence.flags & __I915_EXEC_FENCE_UNKNOWN_FLAGS) {
>> +                               err = -EINVAL;
>> +                               goto err;
>> +                       }
>> +
>> +                       if (user_fence.flags & I915_EXEC_FENCE_WAIT) {
>> +                               err = drm_syncobj_find_fence(
>> +                                       file, user_fence.handle, user_fence.value,
>> +                                       DRM_SYNCOBJ_WAIT_FLAGS_WAIT_FOR_SUBMIT,
>> +                                       &syncobj, &fence);
> Is this still a synchronous wait? That would be an unfortunate change in
> behaviour and antithesis to having a scheduler.
> -Chris
>
Not sure what you mean by synchronous wait.

We have to be able to call the submit before all the fences we depend on 
have materialized.


-Lionel

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH 2/2] drm/i915: add syncobj timeline support
  2019-05-23 13:46     ` Lionel Landwerlin
@ 2019-05-23 13:59       ` Chris Wilson
  2019-05-23 14:15         ` Lionel Landwerlin
  2019-06-03 16:29         ` Lionel Landwerlin
  0 siblings, 2 replies; 16+ messages in thread
From: Chris Wilson @ 2019-05-23 13:59 UTC (permalink / raw)
  To: Lionel Landwerlin, intel-gfx

Quoting Lionel Landwerlin (2019-05-23 14:46:42)
> On 23/05/2019 12:52, Chris Wilson wrote:
> > Quoting Lionel Landwerlin (2019-05-23 12:46:20)
> >> -               syncobj = drm_syncobj_find(file, fence.handle);
> >> -               if (!syncobj) {
> >> -                       DRM_DEBUG("Invalid syncobj handle provided\n");
> >> -                       err = -ENOENT;
> >> -                       goto err;
> >> +                       if (user_fence.flags & __I915_EXEC_FENCE_UNKNOWN_FLAGS) {
> >> +                               err = -EINVAL;
> >> +                               goto err;
> >> +                       }
> >> +
> >> +                       if (user_fence.flags & I915_EXEC_FENCE_WAIT) {
> >> +                               err = drm_syncobj_find_fence(
> >> +                                       file, user_fence.handle, user_fence.value,
> >> +                                       DRM_SYNCOBJ_WAIT_FLAGS_WAIT_FOR_SUBMIT,
> >> +                                       &syncobj, &fence);
> > Is this still a synchronous wait? That would be an unfortunate change in
> > behaviour and antithesis to having a scheduler.
> > -Chris
> >
> Not sure what you mean by synchronous wait.

drm_syncobj_find_fence() has an open-coded wait_event loop. That is
synchronous and inconsistent with using a scheduler; where one only need
to return a proxy fence that will be populated when the syncpt is known,
and be signaled as a result of that syncpt.
-Chris
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH 2/2] drm/i915: add syncobj timeline support
  2019-05-23 13:59       ` Chris Wilson
@ 2019-05-23 14:15         ` Lionel Landwerlin
  2019-06-03 16:29         ` Lionel Landwerlin
  1 sibling, 0 replies; 16+ messages in thread
From: Lionel Landwerlin @ 2019-05-23 14:15 UTC (permalink / raw)
  To: Chris Wilson, intel-gfx

On 23/05/2019 14:59, Chris Wilson wrote:
> Quoting Lionel Landwerlin (2019-05-23 14:46:42)
>> On 23/05/2019 12:52, Chris Wilson wrote:
>>> Quoting Lionel Landwerlin (2019-05-23 12:46:20)
>>>> -               syncobj = drm_syncobj_find(file, fence.handle);
>>>> -               if (!syncobj) {
>>>> -                       DRM_DEBUG("Invalid syncobj handle provided\n");
>>>> -                       err = -ENOENT;
>>>> -                       goto err;
>>>> +                       if (user_fence.flags & __I915_EXEC_FENCE_UNKNOWN_FLAGS) {
>>>> +                               err = -EINVAL;
>>>> +                               goto err;
>>>> +                       }
>>>> +
>>>> +                       if (user_fence.flags & I915_EXEC_FENCE_WAIT) {
>>>> +                               err = drm_syncobj_find_fence(
>>>> +                                       file, user_fence.handle, user_fence.value,
>>>> +                                       DRM_SYNCOBJ_WAIT_FLAGS_WAIT_FOR_SUBMIT,
>>>> +                                       &syncobj, &fence);
>>> Is this still a synchronous wait? That would be an unfortunate change in
>>> behaviour and antithesis to having a scheduler.
>>> -Chris
>>>
>> Not sure what you mean by synchronous wait.
> drm_syncobj_find_fence() has an open-coded wait_event loop. That is
> synchronous and inconsistent with using a scheduler; where one only need
> to return a proxy fence that will be populated when the syncpt is known,
> and be signaled as a result of that syncpt.
> -Chris
>

Right,


I see this changes the behavior for existing drm_syncobjs, which was not 
intended.


For timeline drm-syncobjs, we're aware this will block and might fail if 
the fence doesn't materialize.

The Vulkan spec doesn't give a specific amount of time of which the 
submit fails, apart from it being non zero.


Will fix, thanks a lot for pointing this out.


-Lionel

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 16+ messages in thread

* ✗ Fi.CI.CHECKPATCH: warning for drm/i915: timeline semaphore support
  2019-05-23 11:46 [PATCH 0/2] drm/i915: timeline semaphore support Lionel Landwerlin
  2019-05-23 11:46 ` [PATCH 1/2] drm/syncobj: add an output syncobj parameter to find_fence Lionel Landwerlin
  2019-05-23 11:46 ` [PATCH 2/2] drm/i915: add syncobj timeline support Lionel Landwerlin
@ 2019-05-23 15:44 ` Patchwork
  2019-05-23 16:16 ` ✓ Fi.CI.BAT: success " Patchwork
  2019-05-25  0:59 ` ✓ Fi.CI.IGT: " Patchwork
  4 siblings, 0 replies; 16+ messages in thread
From: Patchwork @ 2019-05-23 15:44 UTC (permalink / raw)
  To: Lionel Landwerlin; +Cc: intel-gfx

== Series Details ==

Series: drm/i915: timeline semaphore support
URL   : https://patchwork.freedesktop.org/series/61032/
State : warning

== Summary ==

$ dim checkpatch origin/drm-tip
72fcbc639236 drm/syncobj: add an output syncobj parameter to find_fence
a888c5f147aa drm/i915: add syncobj timeline support
-:159: CHECK:OPEN_ENDED_LINE: Lines should not end with a '('
#159: FILE: drivers/gpu/drm/i915/i915_gem_execbuffer.c:2259:
+				err = drm_syncobj_find_fence(

-:168: CHECK:OPEN_ENDED_LINE: Lines should not end with a '('
#168: FILE: drivers/gpu/drm/i915/i915_gem_execbuffer.c:2268:
+				syncobj = drm_syncobj_find(

-:218: CHECK:OPEN_ENDED_LINE: Lines should not end with a '('
#218: FILE: drivers/gpu/drm/i915/i915_gem_execbuffer.c:2316:
+				err = drm_syncobj_find_fence(

-:309: WARNING:TYPO_SPELLING: 'transfered' may be misspelled - perhaps 'transferred'?
#309: FILE: drivers/gpu/drm/i915/i915_gem_execbuffer.c:2401:
+			 * The chain's ownership is transfered to the

-:410: CHECK:SPACING: spaces preferred around that '<<' (ctx:VxV)
#410: FILE: include/uapi/drm/i915_drm.h:1174:
+#define I915_EXEC_FENCE_ARRAY2   (1<<22)
                                    ^

-:412: CHECK:SPACING: spaces preferred around that '<<' (ctx:VxV)
#412: FILE: include/uapi/drm/i915_drm.h:1176:
+#define __I915_EXEC_UNKNOWN_FLAGS (-(I915_EXEC_FENCE_ARRAY2<<1))
                                                            ^

total: 0 errors, 1 warnings, 5 checks, 372 lines checked

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 16+ messages in thread

* ✓ Fi.CI.BAT: success for drm/i915: timeline semaphore support
  2019-05-23 11:46 [PATCH 0/2] drm/i915: timeline semaphore support Lionel Landwerlin
                   ` (2 preceding siblings ...)
  2019-05-23 15:44 ` ✗ Fi.CI.CHECKPATCH: warning for drm/i915: timeline semaphore support Patchwork
@ 2019-05-23 16:16 ` Patchwork
  2019-05-25  0:59 ` ✓ Fi.CI.IGT: " Patchwork
  4 siblings, 0 replies; 16+ messages in thread
From: Patchwork @ 2019-05-23 16:16 UTC (permalink / raw)
  To: Lionel Landwerlin; +Cc: intel-gfx

== Series Details ==

Series: drm/i915: timeline semaphore support
URL   : https://patchwork.freedesktop.org/series/61032/
State : success

== Summary ==

CI Bug Log - changes from CI_DRM_6132 -> Patchwork_13078
====================================================

Summary
-------

  **SUCCESS**

  No regressions found.

  External URL: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_13078/

Known issues
------------

  Here are the changes found in Patchwork_13078 that come from known issues:

### IGT changes ###

#### Issues hit ####

  * igt@i915_pm_rpm@basic-pci-d3-state:
    - fi-skl-6600u:       [PASS][1] -> [FAIL][2] ([fdo#107707])
   [1]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6132/fi-skl-6600u/igt@i915_pm_rpm@basic-pci-d3-state.html
   [2]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_13078/fi-skl-6600u/igt@i915_pm_rpm@basic-pci-d3-state.html

  * igt@prime_vgem@basic-fence-flip:
    - fi-ilk-650:         [PASS][3] -> [DMESG-WARN][4] ([fdo#106387]) +1 similar issue
   [3]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6132/fi-ilk-650/igt@prime_vgem@basic-fence-flip.html
   [4]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_13078/fi-ilk-650/igt@prime_vgem@basic-fence-flip.html

  
#### Possible fixes ####

  * igt@gem_ctx_create@basic-files:
    - {fi-icl-dsi}:       [INCOMPLETE][5] ([fdo#107713] / [fdo#109100]) -> [PASS][6]
   [5]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6132/fi-icl-dsi/igt@gem_ctx_create@basic-files.html
   [6]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_13078/fi-icl-dsi/igt@gem_ctx_create@basic-files.html

  * igt@gem_exec_reloc@basic-write-gtt-noreloc:
    - {fi-icl-u3}:        [DMESG-WARN][7] ([fdo#107724]) -> [PASS][8]
   [7]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6132/fi-icl-u3/igt@gem_exec_reloc@basic-write-gtt-noreloc.html
   [8]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_13078/fi-icl-u3/igt@gem_exec_reloc@basic-write-gtt-noreloc.html

  * igt@gem_exec_suspend@basic-s3:
    - fi-blb-e6850:       [INCOMPLETE][9] ([fdo#107718]) -> [PASS][10]
   [9]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6132/fi-blb-e6850/igt@gem_exec_suspend@basic-s3.html
   [10]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_13078/fi-blb-e6850/igt@gem_exec_suspend@basic-s3.html

  
  {name}: This element is suppressed. This means it is ignored when computing
          the status of the difference (SUCCESS, WARNING, or FAILURE).

  [fdo#106387]: https://bugs.freedesktop.org/show_bug.cgi?id=106387
  [fdo#107707]: https://bugs.freedesktop.org/show_bug.cgi?id=107707
  [fdo#107713]: https://bugs.freedesktop.org/show_bug.cgi?id=107713
  [fdo#107718]: https://bugs.freedesktop.org/show_bug.cgi?id=107718
  [fdo#107724]: https://bugs.freedesktop.org/show_bug.cgi?id=107724
  [fdo#108569]: https://bugs.freedesktop.org/show_bug.cgi?id=108569
  [fdo#109100]: https://bugs.freedesktop.org/show_bug.cgi?id=109100


Participating hosts (54 -> 45)
------------------------------

  Missing    (9): fi-kbl-soraka fi-ilk-m540 fi-hsw-4200u fi-byt-squawks fi-bsw-cyan fi-ctg-p8600 fi-pnv-d510 fi-byt-clapper fi-bdw-samus 


Build changes
-------------

  * Linux: CI_DRM_6132 -> Patchwork_13078

  CI_DRM_6132: 78850b480c542b2e10da5a93afac2e13307909cb @ git://anongit.freedesktop.org/gfx-ci/linux
  IGT_5010: 631f3ac2e78c8d6332afc693bf290ae23d8d5685 @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools
  Patchwork_13078: a888c5f147aa7435dbc147b3b899b223389dc2dd @ git://anongit.freedesktop.org/gfx-ci/linux


== Linux commits ==

a888c5f147aa drm/i915: add syncobj timeline support
72fcbc639236 drm/syncobj: add an output syncobj parameter to find_fence

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_13078/
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 16+ messages in thread

* ✓ Fi.CI.IGT: success for drm/i915: timeline semaphore support
  2019-05-23 11:46 [PATCH 0/2] drm/i915: timeline semaphore support Lionel Landwerlin
                   ` (3 preceding siblings ...)
  2019-05-23 16:16 ` ✓ Fi.CI.BAT: success " Patchwork
@ 2019-05-25  0:59 ` Patchwork
  4 siblings, 0 replies; 16+ messages in thread
From: Patchwork @ 2019-05-25  0:59 UTC (permalink / raw)
  To: Lionel Landwerlin; +Cc: intel-gfx

== Series Details ==

Series: drm/i915: timeline semaphore support
URL   : https://patchwork.freedesktop.org/series/61032/
State : success

== Summary ==

CI Bug Log - changes from CI_DRM_6132_full -> Patchwork_13078_full
====================================================

Summary
-------

  **SUCCESS**

  No regressions found.

  

Known issues
------------

  Here are the changes found in Patchwork_13078_full that come from known issues:

### IGT changes ###

#### Issues hit ####

  * igt@gem_ctx_isolation@rcs0-s3:
    - shard-apl:          [PASS][1] -> [DMESG-WARN][2] ([fdo#108566]) +4 similar issues
   [1]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6132/shard-apl5/igt@gem_ctx_isolation@rcs0-s3.html
   [2]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_13078/shard-apl1/igt@gem_ctx_isolation@rcs0-s3.html

  * igt@gem_exec_schedule@wide-render:
    - shard-iclb:         [PASS][3] -> [INCOMPLETE][4] ([fdo#107713] / [fdo#110338 ])
   [3]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6132/shard-iclb8/igt@gem_exec_schedule@wide-render.html
   [4]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_13078/shard-iclb8/igt@gem_exec_schedule@wide-render.html

  * igt@gem_tiled_swapping@non-threaded:
    - shard-glk:          [PASS][5] -> [DMESG-WARN][6] ([fdo#108686])
   [5]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6132/shard-glk5/igt@gem_tiled_swapping@non-threaded.html
   [6]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_13078/shard-glk1/igt@gem_tiled_swapping@non-threaded.html

  * igt@i915_pm_rpm@reg-read-ioctl:
    - shard-skl:          [PASS][7] -> [INCOMPLETE][8] ([fdo#107807])
   [7]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6132/shard-skl6/igt@i915_pm_rpm@reg-read-ioctl.html
   [8]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_13078/shard-skl5/igt@i915_pm_rpm@reg-read-ioctl.html

  * igt@i915_pm_rpm@system-suspend:
    - shard-kbl:          [PASS][9] -> [INCOMPLETE][10] ([fdo#103665] / [fdo#107807])
   [9]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6132/shard-kbl6/igt@i915_pm_rpm@system-suspend.html
   [10]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_13078/shard-kbl6/igt@i915_pm_rpm@system-suspend.html

  * igt@kms_flip@2x-flip-vs-absolute-wf_vblank:
    - shard-hsw:          [PASS][11] -> [SKIP][12] ([fdo#109271]) +30 similar issues
   [11]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6132/shard-hsw8/igt@kms_flip@2x-flip-vs-absolute-wf_vblank.html
   [12]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_13078/shard-hsw5/igt@kms_flip@2x-flip-vs-absolute-wf_vblank.html

  * igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-pri-indfb-draw-pwrite:
    - shard-iclb:         [PASS][13] -> [FAIL][14] ([fdo#103167]) +3 similar issues
   [13]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6132/shard-iclb4/igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-pri-indfb-draw-pwrite.html
   [14]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_13078/shard-iclb6/igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-pri-indfb-draw-pwrite.html

  * igt@kms_lease@cursor_implicit_plane:
    - shard-snb:          [PASS][15] -> [SKIP][16] ([fdo#109271]) +2 similar issues
   [15]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6132/shard-snb1/igt@kms_lease@cursor_implicit_plane.html
   [16]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_13078/shard-snb5/igt@kms_lease@cursor_implicit_plane.html

  * igt@kms_plane@plane-panning-bottom-right-suspend-pipe-b-planes:
    - shard-snb:          [PASS][17] -> [DMESG-WARN][18] ([fdo#102365])
   [17]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6132/shard-snb4/igt@kms_plane@plane-panning-bottom-right-suspend-pipe-b-planes.html
   [18]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_13078/shard-snb2/igt@kms_plane@plane-panning-bottom-right-suspend-pipe-b-planes.html

  * igt@kms_plane_alpha_blend@pipe-b-constant-alpha-min:
    - shard-skl:          [PASS][19] -> [FAIL][20] ([fdo#108145])
   [19]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6132/shard-skl7/igt@kms_plane_alpha_blend@pipe-b-constant-alpha-min.html
   [20]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_13078/shard-skl6/igt@kms_plane_alpha_blend@pipe-b-constant-alpha-min.html

  * igt@kms_setmode@basic:
    - shard-kbl:          [PASS][21] -> [FAIL][22] ([fdo#99912])
   [21]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6132/shard-kbl2/igt@kms_setmode@basic.html
   [22]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_13078/shard-kbl3/igt@kms_setmode@basic.html

  
#### Possible fixes ####

  * igt@gem_ctx_isolation@vecs0-s3:
    - shard-apl:          [DMESG-WARN][23] ([fdo#108566]) -> [PASS][24] +3 similar issues
   [23]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6132/shard-apl7/igt@gem_ctx_isolation@vecs0-s3.html
   [24]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_13078/shard-apl3/igt@gem_ctx_isolation@vecs0-s3.html

  * igt@gem_softpin@noreloc-s3:
    - shard-skl:          [INCOMPLETE][25] ([fdo#104108]) -> [PASS][26]
   [25]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6132/shard-skl5/igt@gem_softpin@noreloc-s3.html
   [26]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_13078/shard-skl5/igt@gem_softpin@noreloc-s3.html

  * igt@kms_flip_tiling@flip-to-y-tiled:
    - shard-iclb:         [FAIL][27] ([fdo#107931] / [fdo#108134]) -> [PASS][28]
   [27]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6132/shard-iclb3/igt@kms_flip_tiling@flip-to-y-tiled.html
   [28]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_13078/shard-iclb3/igt@kms_flip_tiling@flip-to-y-tiled.html

  * igt@kms_frontbuffer_tracking@fbc-1p-primscrn-cur-indfb-draw-render:
    - shard-iclb:         [FAIL][29] ([fdo#103167]) -> [PASS][30] +2 similar issues
   [29]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6132/shard-iclb2/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-cur-indfb-draw-render.html
   [30]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_13078/shard-iclb2/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-cur-indfb-draw-render.html

  * igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-cur-indfb-move:
    - shard-hsw:          [SKIP][31] ([fdo#109271]) -> [PASS][32] +13 similar issues
   [31]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6132/shard-hsw5/igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-cur-indfb-move.html
   [32]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_13078/shard-hsw7/igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-cur-indfb-move.html

  * igt@kms_psr@psr2_sprite_plane_move:
    - shard-iclb:         [SKIP][33] ([fdo#109441]) -> [PASS][34] +1 similar issue
   [33]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6132/shard-iclb5/igt@kms_psr@psr2_sprite_plane_move.html
   [34]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_13078/shard-iclb2/igt@kms_psr@psr2_sprite_plane_move.html

  
#### Warnings ####

  * igt@gem_mmap_gtt@forked-big-copy-odd:
    - shard-iclb:         [INCOMPLETE][35] ([fdo#107713] / [fdo#109100]) -> [TIMEOUT][36] ([fdo#109673]) +1 similar issue
   [35]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6132/shard-iclb2/igt@gem_mmap_gtt@forked-big-copy-odd.html
   [36]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_13078/shard-iclb4/igt@gem_mmap_gtt@forked-big-copy-odd.html

  * igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-spr-indfb-move:
    - shard-skl:          [FAIL][37] ([fdo#108040]) -> [FAIL][38] ([fdo#103167])
   [37]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6132/shard-skl3/igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-spr-indfb-move.html
   [38]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_13078/shard-skl5/igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-spr-indfb-move.html

  * igt@prime_vgem@busy-bsd1:
    - shard-snb:          [FAIL][39] -> [INCOMPLETE][40] ([fdo#105411])
   [39]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6132/shard-snb2/igt@prime_vgem@busy-bsd1.html
   [40]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_13078/shard-snb1/igt@prime_vgem@busy-bsd1.html

  
  [fdo#102365]: https://bugs.freedesktop.org/show_bug.cgi?id=102365
  [fdo#103167]: https://bugs.freedesktop.org/show_bug.cgi?id=103167
  [fdo#103665]: https://bugs.freedesktop.org/show_bug.cgi?id=103665
  [fdo#104108]: https://bugs.freedesktop.org/show_bug.cgi?id=104108
  [fdo#105411]: https://bugs.freedesktop.org/show_bug.cgi?id=105411
  [fdo#107713]: https://bugs.freedesktop.org/show_bug.cgi?id=107713
  [fdo#107807]: https://bugs.freedesktop.org/show_bug.cgi?id=107807
  [fdo#107931]: https://bugs.freedesktop.org/show_bug.cgi?id=107931
  [fdo#108040]: https://bugs.freedesktop.org/show_bug.cgi?id=108040
  [fdo#108134]: https://bugs.freedesktop.org/show_bug.cgi?id=108134
  [fdo#108145]: https://bugs.freedesktop.org/show_bug.cgi?id=108145
  [fdo#108566]: https://bugs.freedesktop.org/show_bug.cgi?id=108566
  [fdo#108686]: https://bugs.freedesktop.org/show_bug.cgi?id=108686
  [fdo#109100]: https://bugs.freedesktop.org/show_bug.cgi?id=109100
  [fdo#109271]: https://bugs.freedesktop.org/show_bug.cgi?id=109271
  [fdo#109441]: https://bugs.freedesktop.org/show_bug.cgi?id=109441
  [fdo#109673]: https://bugs.freedesktop.org/show_bug.cgi?id=109673
  [fdo#110338 ]: https://bugs.freedesktop.org/show_bug.cgi?id=110338 
  [fdo#99912]: https://bugs.freedesktop.org/show_bug.cgi?id=99912


Participating hosts (10 -> 10)
------------------------------

  No changes in participating hosts


Build changes
-------------

  * Linux: CI_DRM_6132 -> Patchwork_13078

  CI_DRM_6132: 78850b480c542b2e10da5a93afac2e13307909cb @ git://anongit.freedesktop.org/gfx-ci/linux
  IGT_5010: 631f3ac2e78c8d6332afc693bf290ae23d8d5685 @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools
  Patchwork_13078: a888c5f147aa7435dbc147b3b899b223389dc2dd @ git://anongit.freedesktop.org/gfx-ci/linux
  piglit_4509: fdc5a4ca11124ab8413c7988896eec4c97336694 @ git://anongit.freedesktop.org/piglit

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_13078/
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH 2/2] drm/i915: add syncobj timeline support
  2019-05-23 13:59       ` Chris Wilson
  2019-05-23 14:15         ` Lionel Landwerlin
@ 2019-06-03 16:29         ` Lionel Landwerlin
  1 sibling, 0 replies; 16+ messages in thread
From: Lionel Landwerlin @ 2019-06-03 16:29 UTC (permalink / raw)
  To: Chris Wilson, intel-gfx

On 23/05/2019 16:59, Chris Wilson wrote:
> Quoting Lionel Landwerlin (2019-05-23 14:46:42)
>> On 23/05/2019 12:52, Chris Wilson wrote:
>>> Quoting Lionel Landwerlin (2019-05-23 12:46:20)
>>>> -               syncobj = drm_syncobj_find(file, fence.handle);
>>>> -               if (!syncobj) {
>>>> -                       DRM_DEBUG("Invalid syncobj handle provided\n");
>>>> -                       err = -ENOENT;
>>>> -                       goto err;
>>>> +                       if (user_fence.flags & __I915_EXEC_FENCE_UNKNOWN_FLAGS) {
>>>> +                               err = -EINVAL;
>>>> +                               goto err;
>>>> +                       }
>>>> +
>>>> +                       if (user_fence.flags & I915_EXEC_FENCE_WAIT) {
>>>> +                               err = drm_syncobj_find_fence(
>>>> +                                       file, user_fence.handle, user_fence.value,
>>>> +                                       DRM_SYNCOBJ_WAIT_FLAGS_WAIT_FOR_SUBMIT,
>>>> +                                       &syncobj, &fence);
>>> Is this still a synchronous wait? That would be an unfortunate change in
>>> behaviour and antithesis to having a scheduler.
>>> -Chris
>>>
>> Not sure what you mean by synchronous wait.
> drm_syncobj_find_fence() has an open-coded wait_event loop. That is
> synchronous and inconsistent with using a scheduler; where one only need
> to return a proxy fence that will be populated when the syncpt is known,
> and be signaled as a result of that syncpt.
> -Chris
>
Just to confirm, are you fine with the submission path of i915 doing the 
wait?

We have support for doing in Anv so that's an option if you prefer.

I don't have a preference :)


Thanks,


-Lionel

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 16+ messages in thread

* ✓ Fi.CI.IGT: success for drm/i915: timeline semaphore support
  2019-08-22 12:12 [PATCH v5 0/2] " Lionel Landwerlin
@ 2019-08-24  6:42 ` Patchwork
  0 siblings, 0 replies; 16+ messages in thread
From: Patchwork @ 2019-08-24  6:42 UTC (permalink / raw)
  To: Lionel Landwerlin; +Cc: intel-gfx

== Series Details ==

Series: drm/i915: timeline semaphore support
URL   : https://patchwork.freedesktop.org/series/65688/
State : success

== Summary ==

CI Bug Log - changes from CI_DRM_6775_full -> Patchwork_14159_full
====================================================

Summary
-------

  **SUCCESS**

  No regressions found.

  

Known issues
------------

  Here are the changes found in Patchwork_14159_full that come from known issues:

### IGT changes ###

#### Issues hit ####

  * igt@gem_exec_schedule@independent-bsd2:
    - shard-iclb:         [PASS][1] -> [SKIP][2] ([fdo#109276]) +21 similar issues
   [1]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6775/shard-iclb2/igt@gem_exec_schedule@independent-bsd2.html
   [2]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14159/shard-iclb6/igt@gem_exec_schedule@independent-bsd2.html

  * igt@gem_exec_schedule@preemptive-hang-bsd:
    - shard-iclb:         [PASS][3] -> [SKIP][4] ([fdo#111325]) +6 similar issues
   [3]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6775/shard-iclb8/igt@gem_exec_schedule@preemptive-hang-bsd.html
   [4]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14159/shard-iclb4/igt@gem_exec_schedule@preemptive-hang-bsd.html

  * igt@gem_softpin@noreloc-s3:
    - shard-skl:          [PASS][5] -> [INCOMPLETE][6] ([fdo#104108] / [fdo#107773])
   [5]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6775/shard-skl2/igt@gem_softpin@noreloc-s3.html
   [6]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14159/shard-skl2/igt@gem_softpin@noreloc-s3.html

  * igt@i915_suspend@fence-restore-tiled2untiled:
    - shard-apl:          [PASS][7] -> [DMESG-WARN][8] ([fdo#108566]) +5 similar issues
   [7]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6775/shard-apl5/igt@i915_suspend@fence-restore-tiled2untiled.html
   [8]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14159/shard-apl8/igt@i915_suspend@fence-restore-tiled2untiled.html

  * igt@kms_cursor_crc@pipe-b-cursor-256x256-onscreen:
    - shard-skl:          [PASS][9] -> [FAIL][10] ([fdo#103232])
   [9]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6775/shard-skl9/igt@kms_cursor_crc@pipe-b-cursor-256x256-onscreen.html
   [10]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14159/shard-skl5/igt@kms_cursor_crc@pipe-b-cursor-256x256-onscreen.html

  * igt@kms_flip@flip-vs-suspend-interruptible:
    - shard-hsw:          [PASS][11] -> [INCOMPLETE][12] ([fdo#103540])
   [11]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6775/shard-hsw1/igt@kms_flip@flip-vs-suspend-interruptible.html
   [12]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14159/shard-hsw2/igt@kms_flip@flip-vs-suspend-interruptible.html

  * igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-pri-indfb-draw-mmap-wc:
    - shard-skl:          [PASS][13] -> [FAIL][14] ([fdo#108040])
   [13]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6775/shard-skl3/igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-pri-indfb-draw-mmap-wc.html
   [14]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14159/shard-skl1/igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-pri-indfb-draw-mmap-wc.html

  * igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-shrfb-msflip-blt:
    - shard-iclb:         [PASS][15] -> [FAIL][16] ([fdo#103167]) +4 similar issues
   [15]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6775/shard-iclb7/igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-shrfb-msflip-blt.html
   [16]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14159/shard-iclb1/igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-shrfb-msflip-blt.html

  * igt@kms_frontbuffer_tracking@fbcpsr-rgb101010-draw-mmap-gtt:
    - shard-skl:          [PASS][17] -> [FAIL][18] ([fdo#103167] / [fdo#110379])
   [17]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6775/shard-skl7/igt@kms_frontbuffer_tracking@fbcpsr-rgb101010-draw-mmap-gtt.html
   [18]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14159/shard-skl4/igt@kms_frontbuffer_tracking@fbcpsr-rgb101010-draw-mmap-gtt.html

  * igt@kms_frontbuffer_tracking@psr-1p-primscrn-cur-indfb-draw-mmap-wc:
    - shard-skl:          [PASS][19] -> [FAIL][20] ([fdo#103167])
   [19]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6775/shard-skl7/igt@kms_frontbuffer_tracking@psr-1p-primscrn-cur-indfb-draw-mmap-wc.html
   [20]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14159/shard-skl4/igt@kms_frontbuffer_tracking@psr-1p-primscrn-cur-indfb-draw-mmap-wc.html

  * igt@kms_plane_alpha_blend@pipe-a-constant-alpha-min:
    - shard-skl:          [PASS][21] -> [FAIL][22] ([fdo#108145]) +1 similar issue
   [21]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6775/shard-skl3/igt@kms_plane_alpha_blend@pipe-a-constant-alpha-min.html
   [22]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14159/shard-skl1/igt@kms_plane_alpha_blend@pipe-a-constant-alpha-min.html

  * igt@kms_plane_multiple@atomic-pipe-c-tiling-yf:
    - shard-skl:          [PASS][23] -> [DMESG-WARN][24] ([fdo#106885])
   [23]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6775/shard-skl3/igt@kms_plane_multiple@atomic-pipe-c-tiling-yf.html
   [24]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14159/shard-skl1/igt@kms_plane_multiple@atomic-pipe-c-tiling-yf.html

  * igt@kms_psr@psr2_suspend:
    - shard-iclb:         [PASS][25] -> [SKIP][26] ([fdo#109441]) +3 similar issues
   [25]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6775/shard-iclb2/igt@kms_psr@psr2_suspend.html
   [26]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14159/shard-iclb6/igt@kms_psr@psr2_suspend.html

  * igt@kms_setmode@basic:
    - shard-kbl:          [PASS][27] -> [FAIL][28] ([fdo#99912])
   [27]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6775/shard-kbl7/igt@kms_setmode@basic.html
   [28]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14159/shard-kbl3/igt@kms_setmode@basic.html

  * igt@kms_vblank@pipe-c-wait-forked-busy-hang:
    - shard-apl:          [PASS][29] -> [INCOMPLETE][30] ([fdo#103927])
   [29]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6775/shard-apl7/igt@kms_vblank@pipe-c-wait-forked-busy-hang.html
   [30]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14159/shard-apl2/igt@kms_vblank@pipe-c-wait-forked-busy-hang.html

  * igt@perf@blocking:
    - shard-skl:          [PASS][31] -> [FAIL][32] ([fdo#110728])
   [31]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6775/shard-skl1/igt@perf@blocking.html
   [32]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14159/shard-skl1/igt@perf@blocking.html

  
#### Possible fixes ####

  * igt@gem_exec_parallel@rcs0-contexts:
    - shard-hsw:          [FAIL][33] -> [PASS][34]
   [33]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6775/shard-hsw6/igt@gem_exec_parallel@rcs0-contexts.html
   [34]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14159/shard-hsw1/igt@gem_exec_parallel@rcs0-contexts.html

  * igt@gem_exec_schedule@in-order-bsd:
    - shard-iclb:         [SKIP][35] ([fdo#111325]) -> [PASS][36] +3 similar issues
   [35]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6775/shard-iclb1/igt@gem_exec_schedule@in-order-bsd.html
   [36]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14159/shard-iclb3/igt@gem_exec_schedule@in-order-bsd.html

  * igt@gem_exec_schedule@preempt-hang-render:
    - shard-iclb:         [INCOMPLETE][37] ([fdo#107713]) -> [PASS][38]
   [37]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6775/shard-iclb7/igt@gem_exec_schedule@preempt-hang-render.html
   [38]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14159/shard-iclb4/igt@gem_exec_schedule@preempt-hang-render.html

  * igt@gem_exec_schedule@preempt-queue-bsd2:
    - shard-iclb:         [SKIP][39] ([fdo#109276]) -> [PASS][40] +12 similar issues
   [39]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6775/shard-iclb7/igt@gem_exec_schedule@preempt-queue-bsd2.html
   [40]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14159/shard-iclb2/igt@gem_exec_schedule@preempt-queue-bsd2.html

  * igt@i915_pm_backlight@fade_with_suspend:
    - shard-skl:          [INCOMPLETE][41] ([fdo#104108]) -> [PASS][42]
   [41]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6775/shard-skl7/igt@i915_pm_backlight@fade_with_suspend.html
   [42]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14159/shard-skl5/igt@i915_pm_backlight@fade_with_suspend.html

  * igt@i915_suspend@debugfs-reader:
    - shard-apl:          [DMESG-WARN][43] ([fdo#108566]) -> [PASS][44] +1 similar issue
   [43]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6775/shard-apl1/igt@i915_suspend@debugfs-reader.html
   [44]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14159/shard-apl2/igt@i915_suspend@debugfs-reader.html

  * igt@kms_flip@flip-vs-expired-vblank:
    - shard-glk:          [FAIL][45] ([fdo#105363]) -> [PASS][46] +1 similar issue
   [45]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6775/shard-glk9/igt@kms_flip@flip-vs-expired-vblank.html
   [46]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14159/shard-glk7/igt@kms_flip@flip-vs-expired-vblank.html

  * igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-cur-indfb-draw-blt:
    - shard-iclb:         [FAIL][47] ([fdo#103167]) -> [PASS][48] +3 similar issues
   [47]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6775/shard-iclb2/igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-cur-indfb-draw-blt.html
   [48]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14159/shard-iclb3/igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-cur-indfb-draw-blt.html

  * igt@kms_plane_alpha_blend@pipe-c-coverage-7efc:
    - shard-skl:          [FAIL][49] ([fdo#108145] / [fdo#110403]) -> [PASS][50]
   [49]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6775/shard-skl5/igt@kms_plane_alpha_blend@pipe-c-coverage-7efc.html
   [50]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14159/shard-skl6/igt@kms_plane_alpha_blend@pipe-c-coverage-7efc.html

  * igt@kms_plane_lowres@pipe-a-tiling-x:
    - shard-iclb:         [FAIL][51] ([fdo#103166]) -> [PASS][52]
   [51]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6775/shard-iclb7/igt@kms_plane_lowres@pipe-a-tiling-x.html
   [52]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14159/shard-iclb1/igt@kms_plane_lowres@pipe-a-tiling-x.html

  * igt@kms_psr@psr2_primary_page_flip:
    - shard-iclb:         [SKIP][53] ([fdo#109441]) -> [PASS][54] +2 similar issues
   [53]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6775/shard-iclb4/igt@kms_psr@psr2_primary_page_flip.html
   [54]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14159/shard-iclb2/igt@kms_psr@psr2_primary_page_flip.html

  
#### Warnings ####

  * igt@gem_ctx_isolation@vcs1-nonpriv:
    - shard-iclb:         [SKIP][55] ([fdo#109276]) -> [FAIL][56] ([fdo#111329])
   [55]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6775/shard-iclb7/igt@gem_ctx_isolation@vcs1-nonpriv.html
   [56]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14159/shard-iclb1/igt@gem_ctx_isolation@vcs1-nonpriv.html

  * igt@gem_mocs_settings@mocs-isolation-bsd2:
    - shard-iclb:         [SKIP][57] ([fdo#109276]) -> [FAIL][58] ([fdo#111330])
   [57]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6775/shard-iclb3/igt@gem_mocs_settings@mocs-isolation-bsd2.html
   [58]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14159/shard-iclb2/igt@gem_mocs_settings@mocs-isolation-bsd2.html

  * igt@gem_mocs_settings@mocs-settings-bsd2:
    - shard-iclb:         [FAIL][59] ([fdo#111330]) -> [SKIP][60] ([fdo#109276]) +1 similar issue
   [59]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6775/shard-iclb2/igt@gem_mocs_settings@mocs-settings-bsd2.html
   [60]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14159/shard-iclb3/igt@gem_mocs_settings@mocs-settings-bsd2.html

  * igt@gem_tiled_swapping@non-threaded:
    - shard-skl:          [SKIP][61] ([fdo#109271]) -> [FAIL][62] ([fdo#108686])
   [61]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6775/shard-skl10/igt@gem_tiled_swapping@non-threaded.html
   [62]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14159/shard-skl9/igt@gem_tiled_swapping@non-threaded.html

  * igt@kms_dp_dsc@basic-dsc-enable-edp:
    - shard-iclb:         [SKIP][63] ([fdo#109349]) -> [DMESG-WARN][64] ([fdo#107724])
   [63]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6775/shard-iclb3/igt@kms_dp_dsc@basic-dsc-enable-edp.html
   [64]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14159/shard-iclb2/igt@kms_dp_dsc@basic-dsc-enable-edp.html

  
  {name}: This element is suppressed. This means it is ignored when computing
          the status of the difference (SUCCESS, WARNING, or FAILURE).

  [fdo#103166]: https://bugs.freedesktop.org/show_bug.cgi?id=103166
  [fdo#103167]: https://bugs.freedesktop.org/show_bug.cgi?id=103167
  [fdo#103232]: https://bugs.freedesktop.org/show_bug.cgi?id=103232
  [fdo#103540]: https://bugs.freedesktop.org/show_bug.cgi?id=103540
  [fdo#103927]: https://bugs.freedesktop.org/show_bug.cgi?id=103927
  [fdo#104108]: https://bugs.freedesktop.org/show_bug.cgi?id=104108
  [fdo#105363]: https://bugs.freedesktop.org/show_bug.cgi?id=105363
  [fdo#106885]: https://bugs.freedesktop.org/show_bug.cgi?id=106885
  [fdo#107713]: https://bugs.freedesktop.org/show_bug.cgi?id=107713
  [fdo#107724]: https://bugs.freedesktop.org/show_bug.cgi?id=107724
  [fdo#107773]: https://bugs.freedesktop.org/show_bug.cgi?id=107773
  [fdo#108040]: https://bugs.freedesktop.org/show_bug.cgi?id=108040
  [fdo#108145]: https://bugs.freedesktop.org/show_bug.cgi?id=108145
  [fdo#108566]: https://bugs.freedesktop.org/show_bug.cgi?id=108566
  [fdo#108686]: https://bugs.freedesktop.org/show_bug.cgi?id=108686
  [fdo#109271]: https://bugs.freedesktop.org/show_bug.cgi?id=109271
  [fdo#109276]: https://bugs.freedesktop.org/show_bug.cgi?id=109276
  [fdo#109349]: https://bugs.freedesktop.org/show_bug.cgi?id=109349
  [fdo#109441]: https://bugs.freedesktop.org/show_bug.cgi?id=109441
  [fdo#110379]: https://bugs.freedesktop.org/show_bug.cgi?id=110379
  [fdo#110403]: https://bugs.freedesktop.org/show_bug.cgi?id=110403
  [fdo#110728]: https://bugs.freedesktop.org/show_bug.cgi?id=110728
  [fdo#111325]: https://bugs.freedesktop.org/show_bug.cgi?id=111325
  [fdo#111329]: https://bugs.freedesktop.org/show_bug.cgi?id=111329
  [fdo#111330]: https://bugs.freedesktop.org/show_bug.cgi?id=111330
  [fdo#111473 ]: https://bugs.freedesktop.org/show_bug.cgi?id=111473 
  [fdo#99912]: https://bugs.freedesktop.org/show_bug.cgi?id=99912


Participating hosts (9 -> 9)
------------------------------

  No changes in participating hosts


Build changes
-------------

  * CI: CI-20190529 -> None
  * Linux: CI_DRM_6775 -> Patchwork_14159

  CI-20190529: 20190529
  CI_DRM_6775: 525ec65b2d3a225e71cd64c37b096cdb377f1101 @ git://anongit.freedesktop.org/gfx-ci/linux
  IGT_5148: 50390dd7adaccae21cafa85b866c17606cec94c3 @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools
  Patchwork_14159: fba596a506743edf607d03fce6591e2fa37835f9 @ git://anongit.freedesktop.org/gfx-ci/linux
  piglit_4509: fdc5a4ca11124ab8413c7988896eec4c97336694 @ git://anongit.freedesktop.org/piglit

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14159/
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 16+ messages in thread

* ✓ Fi.CI.IGT: success for drm/i915: timeline semaphore support
  2019-08-22 22:31 [PATCH v5 0/2] " Lionel Landwerlin
@ 2019-08-24  5:35 ` Patchwork
  0 siblings, 0 replies; 16+ messages in thread
From: Patchwork @ 2019-08-24  5:35 UTC (permalink / raw)
  To: Lionel Landwerlin; +Cc: intel-gfx

== Series Details ==

Series: drm/i915: timeline semaphore support
URL   : https://patchwork.freedesktop.org/series/65681/
State : success

== Summary ==

CI Bug Log - changes from CI_DRM_6775_full -> Patchwork_14156_full
====================================================

Summary
-------

  **WARNING**

  Minor unknown changes coming with Patchwork_14156_full need to be verified
  manually.
  
  If you think the reported changes have nothing to do with the changes
  introduced in Patchwork_14156_full, please notify your bug team to allow them
  to document this new failure mode, which will reduce false positives in CI.

  

Possible new issues
-------------------

  Here are the unknown changes that may have been introduced in Patchwork_14156_full:

### IGT changes ###

#### Warnings ####

  * igt@gem_exec_parallel@contexts:
    - shard-hsw:          [FAIL][1] ([fdo#111469]) -> [TIMEOUT][2]
   [1]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6775/shard-hsw6/igt@gem_exec_parallel@contexts.html
   [2]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14156/shard-hsw2/igt@gem_exec_parallel@contexts.html

  
Known issues
------------

  Here are the changes found in Patchwork_14156_full that come from known issues:

### IGT changes ###

#### Issues hit ####

  * igt@gem_exec_schedule@preempt-queue-bsd1:
    - shard-iclb:         [PASS][3] -> [SKIP][4] ([fdo#109276]) +15 similar issues
   [3]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6775/shard-iclb4/igt@gem_exec_schedule@preempt-queue-bsd1.html
   [4]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14156/shard-iclb7/igt@gem_exec_schedule@preempt-queue-bsd1.html

  * igt@gem_exec_schedule@wide-bsd:
    - shard-iclb:         [PASS][5] -> [SKIP][6] ([fdo#111325]) +3 similar issues
   [5]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6775/shard-iclb7/igt@gem_exec_schedule@wide-bsd.html
   [6]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14156/shard-iclb2/igt@gem_exec_schedule@wide-bsd.html

  * igt@gem_tiled_wb:
    - shard-glk:          [PASS][7] -> [INCOMPLETE][8] ([fdo#103359] / [k.org#198133])
   [7]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6775/shard-glk3/igt@gem_tiled_wb.html
   [8]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14156/shard-glk2/igt@gem_tiled_wb.html

  * igt@i915_pm_rpm@universal-planes-dpms:
    - shard-iclb:         [PASS][9] -> [INCOMPLETE][10] ([fdo#107713] / [fdo#108840])
   [9]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6775/shard-iclb8/igt@i915_pm_rpm@universal-planes-dpms.html
   [10]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14156/shard-iclb1/igt@i915_pm_rpm@universal-planes-dpms.html

  * igt@i915_selftest@live_hangcheck:
    - shard-iclb:         [PASS][11] -> [INCOMPLETE][12] ([fdo#107713] / [fdo#108569])
   [11]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6775/shard-iclb1/igt@i915_selftest@live_hangcheck.html
   [12]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14156/shard-iclb2/igt@i915_selftest@live_hangcheck.html

  * igt@kms_flip@plain-flip-fb-recreate:
    - shard-skl:          [PASS][13] -> [FAIL][14] ([fdo#100368])
   [13]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6775/shard-skl9/igt@kms_flip@plain-flip-fb-recreate.html
   [14]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14156/shard-skl4/igt@kms_flip@plain-flip-fb-recreate.html

  * igt@kms_frontbuffer_tracking@fbc-1p-pri-indfb-multidraw:
    - shard-iclb:         [PASS][15] -> [FAIL][16] ([fdo#103167]) +6 similar issues
   [15]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6775/shard-iclb3/igt@kms_frontbuffer_tracking@fbc-1p-pri-indfb-multidraw.html
   [16]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14156/shard-iclb5/igt@kms_frontbuffer_tracking@fbc-1p-pri-indfb-multidraw.html

  * igt@kms_frontbuffer_tracking@fbc-suspend:
    - shard-skl:          [PASS][17] -> [INCOMPLETE][18] ([fdo#104108])
   [17]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6775/shard-skl9/igt@kms_frontbuffer_tracking@fbc-suspend.html
   [18]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14156/shard-skl7/igt@kms_frontbuffer_tracking@fbc-suspend.html

  * igt@kms_plane_alpha_blend@pipe-b-constant-alpha-min:
    - shard-skl:          [PASS][19] -> [FAIL][20] ([fdo#108145])
   [19]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6775/shard-skl8/igt@kms_plane_alpha_blend@pipe-b-constant-alpha-min.html
   [20]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14156/shard-skl6/igt@kms_plane_alpha_blend@pipe-b-constant-alpha-min.html

  * igt@kms_psr@psr2_suspend:
    - shard-iclb:         [PASS][21] -> [SKIP][22] ([fdo#109441]) +3 similar issues
   [21]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6775/shard-iclb2/igt@kms_psr@psr2_suspend.html
   [22]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14156/shard-iclb8/igt@kms_psr@psr2_suspend.html

  * igt@kms_setmode@basic:
    - shard-kbl:          [PASS][23] -> [FAIL][24] ([fdo#99912])
   [23]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6775/shard-kbl7/igt@kms_setmode@basic.html
   [24]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14156/shard-kbl7/igt@kms_setmode@basic.html

  * igt@kms_vblank@pipe-a-ts-continuation-suspend:
    - shard-apl:          [PASS][25] -> [DMESG-WARN][26] ([fdo#108566]) +6 similar issues
   [25]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6775/shard-apl4/igt@kms_vblank@pipe-a-ts-continuation-suspend.html
   [26]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14156/shard-apl1/igt@kms_vblank@pipe-a-ts-continuation-suspend.html

  * igt@perf@blocking:
    - shard-skl:          [PASS][27] -> [FAIL][28] ([fdo#110728])
   [27]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6775/shard-skl1/igt@perf@blocking.html
   [28]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14156/shard-skl3/igt@perf@blocking.html

  
#### Possible fixes ####

  * igt@gem_exec_parallel@rcs0-contexts:
    - shard-hsw:          [FAIL][29] -> [PASS][30]
   [29]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6775/shard-hsw6/igt@gem_exec_parallel@rcs0-contexts.html
   [30]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14156/shard-hsw5/igt@gem_exec_parallel@rcs0-contexts.html

  * igt@gem_exec_schedule@in-order-bsd:
    - shard-iclb:         [SKIP][31] ([fdo#111325]) -> [PASS][32] +2 similar issues
   [31]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6775/shard-iclb1/igt@gem_exec_schedule@in-order-bsd.html
   [32]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14156/shard-iclb3/igt@gem_exec_schedule@in-order-bsd.html

  * igt@gem_exec_schedule@preempt-hang-render:
    - shard-iclb:         [INCOMPLETE][33] ([fdo#107713]) -> [PASS][34]
   [33]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6775/shard-iclb7/igt@gem_exec_schedule@preempt-hang-render.html
   [34]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14156/shard-iclb6/igt@gem_exec_schedule@preempt-hang-render.html

  * igt@gem_exec_schedule@preempt-queue-bsd2:
    - shard-iclb:         [SKIP][35] ([fdo#109276]) -> [PASS][36] +10 similar issues
   [35]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6775/shard-iclb7/igt@gem_exec_schedule@preempt-queue-bsd2.html
   [36]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14156/shard-iclb2/igt@gem_exec_schedule@preempt-queue-bsd2.html

  * igt@i915_pm_backlight@fade_with_suspend:
    - shard-skl:          [INCOMPLETE][37] ([fdo#104108]) -> [PASS][38]
   [37]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6775/shard-skl7/igt@i915_pm_backlight@fade_with_suspend.html
   [38]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14156/shard-skl10/igt@i915_pm_backlight@fade_with_suspend.html

  * igt@i915_suspend@sysfs-reader:
    - shard-apl:          [DMESG-WARN][39] ([fdo#108566]) -> [PASS][40] +4 similar issues
   [39]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6775/shard-apl2/igt@i915_suspend@sysfs-reader.html
   [40]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14156/shard-apl1/igt@i915_suspend@sysfs-reader.html

  * igt@kms_flip@flip-vs-expired-vblank:
    - shard-glk:          [FAIL][41] ([fdo#105363]) -> [PASS][42] +1 similar issue
   [41]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6775/shard-glk9/igt@kms_flip@flip-vs-expired-vblank.html
   [42]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14156/shard-glk2/igt@kms_flip@flip-vs-expired-vblank.html

  * igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-pri-indfb-draw-pwrite:
    - shard-iclb:         [FAIL][43] ([fdo#103167]) -> [PASS][44] +5 similar issues
   [43]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6775/shard-iclb8/igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-pri-indfb-draw-pwrite.html
   [44]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14156/shard-iclb3/igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-pri-indfb-draw-pwrite.html

  * igt@kms_plane_lowres@pipe-a-tiling-x:
    - shard-iclb:         [FAIL][45] ([fdo#103166]) -> [PASS][46]
   [45]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6775/shard-iclb7/igt@kms_plane_lowres@pipe-a-tiling-x.html
   [46]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14156/shard-iclb5/igt@kms_plane_lowres@pipe-a-tiling-x.html

  * igt@kms_psr@psr2_dpms:
    - shard-iclb:         [SKIP][47] ([fdo#109441]) -> [PASS][48] +1 similar issue
   [47]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6775/shard-iclb7/igt@kms_psr@psr2_dpms.html
   [48]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14156/shard-iclb2/igt@kms_psr@psr2_dpms.html

  * igt@kms_setmode@basic:
    - shard-apl:          [FAIL][49] ([fdo#99912]) -> [PASS][50]
   [49]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6775/shard-apl2/igt@kms_setmode@basic.html
   [50]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14156/shard-apl1/igt@kms_setmode@basic.html

  
#### Warnings ####

  * igt@gem_mocs_settings@mocs-reset-bsd2:
    - shard-iclb:         [SKIP][51] ([fdo#109276]) -> [FAIL][52] ([fdo#111330]) +1 similar issue
   [51]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6775/shard-iclb6/igt@gem_mocs_settings@mocs-reset-bsd2.html
   [52]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14156/shard-iclb4/igt@gem_mocs_settings@mocs-reset-bsd2.html

  
  [fdo#100368]: https://bugs.freedesktop.org/show_bug.cgi?id=100368
  [fdo#103166]: https://bugs.freedesktop.org/show_bug.cgi?id=103166
  [fdo#103167]: https://bugs.freedesktop.org/show_bug.cgi?id=103167
  [fdo#103359]: https://bugs.freedesktop.org/show_bug.cgi?id=103359
  [fdo#104108]: https://bugs.freedesktop.org/show_bug.cgi?id=104108
  [fdo#105363]: https://bugs.freedesktop.org/show_bug.cgi?id=105363
  [fdo#107713]: https://bugs.freedesktop.org/show_bug.cgi?id=107713
  [fdo#108145]: https://bugs.freedesktop.org/show_bug.cgi?id=108145
  [fdo#108566]: https://bugs.freedesktop.org/show_bug.cgi?id=108566
  [fdo#108569]: https://bugs.freedesktop.org/show_bug.cgi?id=108569
  [fdo#108840]: https://bugs.freedesktop.org/show_bug.cgi?id=108840
  [fdo#109276]: https://bugs.freedesktop.org/show_bug.cgi?id=109276
  [fdo#109441]: https://bugs.freedesktop.org/show_bug.cgi?id=109441
  [fdo#110728]: https://bugs.freedesktop.org/show_bug.cgi?id=110728
  [fdo#111325]: https://bugs.freedesktop.org/show_bug.cgi?id=111325
  [fdo#111330]: https://bugs.freedesktop.org/show_bug.cgi?id=111330
  [fdo#111469]: https://bugs.freedesktop.org/show_bug.cgi?id=111469
  [fdo#99912]: https://bugs.freedesktop.org/show_bug.cgi?id=99912
  [k.org#198133]: https://bugzilla.kernel.org/show_bug.cgi?id=198133


Participating hosts (9 -> 9)
------------------------------

  No changes in participating hosts


Build changes
-------------

  * CI: CI-20190529 -> None
  * Linux: CI_DRM_6775 -> Patchwork_14156

  CI-20190529: 20190529
  CI_DRM_6775: 525ec65b2d3a225e71cd64c37b096cdb377f1101 @ git://anongit.freedesktop.org/gfx-ci/linux
  IGT_5148: 50390dd7adaccae21cafa85b866c17606cec94c3 @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools
  Patchwork_14156: 191c5ab7e58a2c61c8f967f9b1114aa42378cb3d @ git://anongit.freedesktop.org/gfx-ci/linux
  piglit_4509: fdc5a4ca11124ab8413c7988896eec4c97336694 @ git://anongit.freedesktop.org/piglit

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14156/
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 16+ messages in thread

end of thread, other threads:[~2019-08-24  6:42 UTC | newest]

Thread overview: 16+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-05-23 11:46 [PATCH 0/2] drm/i915: timeline semaphore support Lionel Landwerlin
2019-05-23 11:46 ` [PATCH 1/2] drm/syncobj: add an output syncobj parameter to find_fence Lionel Landwerlin
2019-05-23 12:11   ` Zhou, David(ChunMing)
2019-05-23 13:35     ` Lionel Landwerlin
2019-05-23 13:37       ` Lionel Landwerlin
2019-05-23 11:46 ` [PATCH 2/2] drm/i915: add syncobj timeline support Lionel Landwerlin
2019-05-23 11:52   ` Chris Wilson
2019-05-23 13:46     ` Lionel Landwerlin
2019-05-23 13:59       ` Chris Wilson
2019-05-23 14:15         ` Lionel Landwerlin
2019-06-03 16:29         ` Lionel Landwerlin
2019-05-23 15:44 ` ✗ Fi.CI.CHECKPATCH: warning for drm/i915: timeline semaphore support Patchwork
2019-05-23 16:16 ` ✓ Fi.CI.BAT: success " Patchwork
2019-05-25  0:59 ` ✓ Fi.CI.IGT: " Patchwork
2019-08-22 12:12 [PATCH v5 0/2] " Lionel Landwerlin
2019-08-24  6:42 ` ✓ Fi.CI.IGT: success for " Patchwork
2019-08-22 22:31 [PATCH v5 0/2] " Lionel Landwerlin
2019-08-24  5:35 ` ✓ Fi.CI.IGT: success for " Patchwork

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.