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

drm/etnaviv: stop using dma_resv_excl_fence v2



We can get the excl fence together with the shared ones as well.

v2: rename the member to fences as well

Signed-off-by: default avatarChristian König <christian.koenig@amd.com>
Reviewed-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
Reviewed-by: default avatarLucas Stach <l.stach@pengutronix.de>
Cc: Lucas Stach <l.stach@pengutronix.de>
Cc: Russell King <linux+etnaviv@armlinux.org.uk>
Cc: Christian Gmeiner <christian.gmeiner@gmail.com>
Cc: etnaviv@lists.freedesktop.org
Link: https://patchwork.freedesktop.org/patch/msgid/20220321135856.1331-5-christian.koenig@amd.com
parent e0fd83db
Loading
Loading
Loading
Loading
+2 −3
Original line number Diff line number Diff line
@@ -80,9 +80,8 @@ struct etnaviv_gem_submit_bo {
	u64 va;
	struct etnaviv_gem_object *obj;
	struct etnaviv_vram_mapping *mapping;
	struct dma_fence *excl;
	unsigned int nr_shared;
	struct dma_fence **shared;
	unsigned int nr_fences;
	struct dma_fence **fences;
};

/* Created per submit-ioctl, to track bo's and cmdstream bufs, etc,
+5 −9
Original line number Diff line number Diff line
@@ -188,15 +188,11 @@ static int submit_fence_sync(struct etnaviv_gem_submit *submit)
		if (submit->flags & ETNA_SUBMIT_NO_IMPLICIT)
			continue;

		if (bo->flags & ETNA_SUBMIT_BO_WRITE) {
			ret = dma_resv_get_fences(robj, true, &bo->nr_shared,
						  &bo->shared);
		ret = dma_resv_get_fences(robj,
					  bo->flags & ETNA_SUBMIT_BO_WRITE,
					  &bo->nr_fences, &bo->fences);
		if (ret)
			return ret;
		} else {
			bo->excl = dma_fence_get(dma_resv_excl_fence(robj));
		}

	}

	return ret;
+7 −17
Original line number Diff line number Diff line
@@ -39,31 +39,21 @@ etnaviv_sched_dependency(struct drm_sched_job *sched_job,
		struct etnaviv_gem_submit_bo *bo = &submit->bos[i];
		int j;

		if (bo->excl) {
			fence = bo->excl;
			bo->excl = NULL;

			if (!dma_fence_is_signaled(fence))
				return fence;

			dma_fence_put(fence);
		}

		for (j = 0; j < bo->nr_shared; j++) {
			if (!bo->shared[j])
		for (j = 0; j < bo->nr_fences; j++) {
			if (!bo->fences[j])
				continue;

			fence = bo->shared[j];
			bo->shared[j] = NULL;
			fence = bo->fences[j];
			bo->fences[j] = NULL;

			if (!dma_fence_is_signaled(fence))
				return fence;

			dma_fence_put(fence);
		}
		kfree(bo->shared);
		bo->nr_shared = 0;
		bo->shared = NULL;
		kfree(bo->fences);
		bo->nr_fences = 0;
		bo->fences = NULL;
	}

	return NULL;