Commit dd7a7d1f authored by Christian König's avatar Christian König
Browse files

drm/i915: use new reservation_object_fences helper



Instead of open coding the sequence loop use the new helper.

Signed-off-by: default avatarChristian König <christian.koenig@amd.com>
Reviewed-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
Link: https://patchwork.freedesktop.org/patch/322377/?series=64837&rev=1
parent 67c97fb7
Loading
Loading
Loading
Loading
+7 −17
Original line number Diff line number Diff line
@@ -83,7 +83,8 @@ i915_gem_busy_ioctl(struct drm_device *dev, void *data,
	struct drm_i915_gem_busy *args = data;
	struct drm_i915_gem_object *obj;
	struct reservation_object_list *list;
	unsigned int seq;
	unsigned int i, shared_count;
	struct dma_fence *excl;
	int err;

	err = -ENOENT;
@@ -109,28 +110,17 @@ i915_gem_busy_ioctl(struct drm_device *dev, void *data,
	 * to report the overall busyness. This is what the wait-ioctl does.
	 *
	 */
retry:
	seq = raw_read_seqcount(&obj->base.resv->seq);
	reservation_object_fences(obj->base.resv, &excl, &list, &shared_count);

	/* Translate the exclusive fence to the READ *and* WRITE engine */
	args->busy =
		busy_check_writer(rcu_dereference(obj->base.resv->fence_excl));
	args->busy = busy_check_writer(excl);

	/* Translate shared fences to READ set of engines */
	list = rcu_dereference(obj->base.resv->fence);
	if (list) {
		unsigned int shared_count = list->shared_count, i;

	for (i = 0; i < shared_count; ++i) {
			struct dma_fence *fence =
				rcu_dereference(list->shared[i]);
		struct dma_fence *fence = rcu_dereference(list->shared[i]);

		args->busy |= busy_check_reader(fence);
	}
	}

	if (args->busy && read_seqcount_retry(&obj->base.resv->seq, seq))
		goto retry;

	err = 0;
out: