OSDN Git Service

dma-buf: return only unsignaled fences in dma_fence_unwrap_for_each v3
authorChristian König <christian.koenig@amd.com>
Wed, 4 May 2022 11:01:29 +0000 (13:01 +0200)
committerChristian König <christian.koenig@amd.com>
Mon, 30 May 2022 12:23:21 +0000 (14:23 +0200)
dma_fence_chain containers cleanup signaled fences automatically, so
filter those out from arrays as well.

v2: fix missing walk over the array
v3: massively simplify the patch and actually update the description.

Signed-off-by: Christian König <christian.koenig@amd.com>
Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Link: https://patchwork.freedesktop.org/patch/msgid/20220518135844.3338-4-christian.koenig@amd.com
include/linux/dma-fence-unwrap.h

index e7c219d..a4d342f 100644 (file)
@@ -43,9 +43,13 @@ 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))
+            fence = dma_fence_unwrap_next(cursor))                     \
+               if (!dma_fence_is_signaled(fence))
 
 #endif