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

drm/i915: use the new iterator in i915_gem_busy_ioctl v2



This makes the function much simpler since the complex
retry logic is now handled else where.

Signed-off-by: default avatarChristian König <christian.koenig@amd.com>
Acked-by: default avatarDaniel Vetter <daniel@ffwll.ch>
Link: https://patchwork.freedesktop.org/patch/msgid/20211116102431.198905-2-christian.koenig@amd.com
parent a193f3b4
Loading
Loading
Loading
Loading
+14 −21
Original line number Diff line number Diff line
@@ -115,8 +115,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 dma_resv_list *list;
	unsigned int seq;
	struct dma_resv_iter cursor;
	struct dma_fence *fence;
	int err;

	err = -ENOENT;
@@ -142,27 +142,20 @@ 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);
	args->busy = 0;
	dma_resv_iter_begin(&cursor, obj->base.resv, true);
	dma_resv_for_each_fence_unlocked(&cursor, fence) {
		if (dma_resv_iter_is_restarted(&cursor))
			args->busy = 0;

		if (dma_resv_iter_is_exclusive(&cursor))
			/* Translate the exclusive fence to the READ *and* WRITE engine */
	args->busy = busy_check_writer(dma_resv_excl_fence(obj->base.resv));

			args->busy |= busy_check_writer(fence);
		else
			/* Translate shared fences to READ set of engines */
	list = dma_resv_shared_list(obj->base.resv);
	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]);

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

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

	err = 0;
out: