[PATCH 1/3] dma-buf: add dma_fence_array_for_each (v2)
Christian König
ckoenig.leichtzumerken at gmail.com
Thu Mar 18 09:38:11 UTC 2021
Am 17.03.21 um 23:19 schrieb Jason Ekstrand:
> From: Christian König <ckoenig.leichtzumerken at gmail.com>
>
> Add a helper to iterate over all fences in a dma_fence_array object.
>
> v2 (Jason Ekstrand)
> - Return NULL from dma_fence_array_first if head == NULL. This matches
> the iterator behavior of dma_fence_chain_for_each in that it iterates
> zero times if head == NULL.
> - Return NULL from dma_fence_array_next if index > array->num_fences.
Is there any reason you send this patch alone out once more?
I don't see any changes compared to the last version.
Christian.
>
> Signed-off-by: Jason Ekstrand <jason at jlekstrand.net>
> ---
> drivers/dma-buf/dma-fence-array.c | 27 +++++++++++++++++++++++++++
> include/linux/dma-fence-array.h | 17 +++++++++++++++++
> 2 files changed, 44 insertions(+)
>
> diff --git a/drivers/dma-buf/dma-fence-array.c b/drivers/dma-buf/dma-fence-array.c
> index d3fbd950be944..2ac1afc697d0f 100644
> --- a/drivers/dma-buf/dma-fence-array.c
> +++ b/drivers/dma-buf/dma-fence-array.c
> @@ -201,3 +201,30 @@ bool dma_fence_match_context(struct dma_fence *fence, u64 context)
> return true;
> }
> EXPORT_SYMBOL(dma_fence_match_context);
> +
> +struct dma_fence *dma_fence_array_first(struct dma_fence *head)
> +{
> + struct dma_fence_array *array;
> +
> + if (!head)
> + return NULL;
> +
> + array = to_dma_fence_array(head);
> + if (!array)
> + return head;
> +
> + return array->fences[0];
> +}
> +EXPORT_SYMBOL(dma_fence_array_first);
> +
> +struct dma_fence *dma_fence_array_next(struct dma_fence *head,
> + unsigned int index)
> +{
> + struct dma_fence_array *array = to_dma_fence_array(head);
> +
> + if (!array || index >= array->num_fences)
> + return NULL;
> +
> + return array->fences[index];
> +}
> +EXPORT_SYMBOL(dma_fence_array_next);
> diff --git a/include/linux/dma-fence-array.h b/include/linux/dma-fence-array.h
> index 303dd712220fd..588ac8089dd61 100644
> --- a/include/linux/dma-fence-array.h
> +++ b/include/linux/dma-fence-array.h
> @@ -74,6 +74,19 @@ to_dma_fence_array(struct dma_fence *fence)
> return container_of(fence, struct dma_fence_array, base);
> }
>
> +/**
> + * dma_fence_array_for_each - iterate over all fences in array
> + * @fence: current fence
> + * @index: index into the array
> + * @head: potential dma_fence_array object
> + *
> + * Test if @array is a dma_fence_array object and if yes iterate over all fences
> + * in the array. If not just iterate over the fence in @array itself.
> + */
> +#define dma_fence_array_for_each(fence, index, head) \
> + for (index = 0, fence = dma_fence_array_first(head); fence; \
> + ++(index), fence = dma_fence_array_next(head, index))
> +
> struct dma_fence_array *dma_fence_array_create(int num_fences,
> struct dma_fence **fences,
> u64 context, unsigned seqno,
> @@ -81,4 +94,8 @@ struct dma_fence_array *dma_fence_array_create(int num_fences,
>
> bool dma_fence_match_context(struct dma_fence *fence, u64 context);
>
> +struct dma_fence *dma_fence_array_first(struct dma_fence *head);
> +struct dma_fence *dma_fence_array_next(struct dma_fence *head,
> + unsigned int index);
> +
> #endif /* __LINUX_DMA_FENCE_ARRAY_H */
More information about the dri-devel
mailing list