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.
Showing the changes to include (1 of 2 files). Show all
Unified · Split
| @@ -61,6 +61,19 @@ to_dma_fence_array(struct dma_fence *fence) · 60 unmodified lines | ||
| 61 | 61 | return container_of(fence, struct dma_fence_array, base); |
| 62 | 62 | } |
| 63 | 63 | |
| 64 | +/** | |
| 65 | + * dma_fence_array_for_each - iterate over all fences in array | |
| 66 | + * @fence: current fence | |
| 67 | + * @index: index into the array | |
| 68 | + * @head: potential dma_fence_array object | |
| 69 | + * | |
| 70 | + * Test if @array is a dma_fence_array object and if yes iterate over all fences | |
| 71 | + * in the array. If not just iterate over the fence in @array itself. | |
| 72 | + */ | |
| 73 | +#define dma_fence_array_for_each(fence, index, head) \ | |
| 74 | + for (index = 0, fence = dma_fence_array_first(head); fence; \ | |
| 75 | + ++(index), fence = dma_fence_array_next(head, index)) | |
| 76 | + | |
| 64 | 77 | struct dma_fence_array *dma_fence_array_create(int num_fences, |
| 65 | 78 | struct dma_fence **fences, |
| 66 | 79 | u64 context, unsigned seqno, |
| @@ -68,4 +81,8 @@ struct dma_fence_array *dma_fence_array_create(int num_fences, · 1 unmodified line | ||
| 68 | 81 | |
| 69 | 82 | bool dma_fence_match_context(struct dma_fence *fence, u64 context); |
| 70 | 83 | |
| 84 | +struct dma_fence *dma_fence_array_first(struct dma_fence *head); | |
| 85 | +struct dma_fence *dma_fence_array_next(struct dma_fence *head, | |
| 86 | + unsigned int index); | |
| 87 | + | |
| 71 | 88 | #endif /* __LINUX_DMA_FENCE_ARRAY_H */ |