On Tue, Jul 12, 2022 at 8:06 AM Christian König <christian.koenig@xxxxxxx> wrote: > > Hi Karolina, > > Am 12.07.22 um 14:04 schrieb Karolina Drobnik: > > Hi Christian, > > > > On 12.07.2022 12:28, Christian König wrote: > >> This reverts commit 8f61973718485f3e89bc4f408f929048b7b47c83. > >> > >> 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: Christian König <christian.koenig@xxxxxxx> > > > > After applying the patch, fence merging works and all sw_sync subtests > > are passing. Thanks for taking care of this. > > > > Tested-by: Karolina Drobnik <karolina.drobnik@xxxxxxxxx> > > can anybody give me an rb or at least an Acked-by as well so that I can > push this upstream? Patch makes sense. Reviewed-by: Alex Deucher <alexander.deucher@xxxxxxx> > > Thanks, > Christian. > > > > >> --- > >> drivers/dma-buf/dma-fence-unwrap.c | 3 ++- > >> include/linux/dma-fence-unwrap.h | 6 +----- > >> 2 files changed, 3 insertions(+), 6 deletions(-) > >> > >> diff --git a/drivers/dma-buf/dma-fence-unwrap.c > >> b/drivers/dma-buf/dma-fence-unwrap.c > >> index 502a65ea6d44..7002bca792ff 100644 > >> --- a/drivers/dma-buf/dma-fence-unwrap.c > >> +++ b/drivers/dma-buf/dma-fence-unwrap.c > >> @@ -72,7 +72,8 @@ 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]) > >> - ++count; > >> + if (!dma_fence_is_signaled(tmp)) > >> + ++count; > >> } > >> if (count == 0) > >> diff --git a/include/linux/dma-fence-unwrap.h > >> b/include/linux/dma-fence-unwrap.h > >> index 390de1ee9d35..66b1e56fbb81 100644 > >> --- a/include/linux/dma-fence-unwrap.h > >> +++ b/include/linux/dma-fence-unwrap.h > >> @@ -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, >