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

dma-buf: revert "return only unsignaled fences in dma_fence_unwrap_for_each v3"



This reverts commit 8f619737.

It turned out that this is not correct. Especially the sync_file info
IOCTL needs to see even signaled fences to correctly report back their
status to userspace.

Instead add the filter in the merge function again where it makes sense.

Signed-off-by: default avatarChristian König <christian.koenig@amd.com>
Tested-by: default avatarKarolina Drobnik <karolina.drobnik@intel.com>
Reviewed-by: default avatarAlex Deucher <alexander.deucher@amd.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20220712102849.1562-1-christian.koenig@amd.com
parent fc8d29e2
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -72,6 +72,7 @@ struct dma_fence *__dma_fence_unwrap_merge(unsigned int num_fences,
	count = 0;
	for (i = 0; i < num_fences; ++i) {
		dma_fence_unwrap_for_each(tmp, &iter[i], fences[i])
			if (!dma_fence_is_signaled(tmp))
				++count;
	}

+1 −5
Original line number Diff line number Diff line
@@ -43,14 +43,10 @@ struct dma_fence *dma_fence_unwrap_next(struct dma_fence_unwrap *cursor);
 * Unwrap dma_fence_chain and dma_fence_array containers and deep dive into all
 * potential fences in them. If @head is just a normal fence only that one is
 * returned.
 *
 * Note that signalled fences are opportunistically filtered out, which
 * means the iteration is potentially over no fence at all.
 */
#define dma_fence_unwrap_for_each(fence, cursor, head)			\
	for (fence = dma_fence_unwrap_first(head, cursor); fence;	\
	     fence = dma_fence_unwrap_next(cursor))			\
		if (!dma_fence_is_signaled(fence))
	     fence = dma_fence_unwrap_next(cursor))

struct dma_fence *__dma_fence_unwrap_merge(unsigned int num_fences,
					   struct dma_fence **fences,