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

Christian König christian.koenig at amd.com
Thu Jul 14 08:49:29 UTC 2022


Hi Thomas,

Am 14.07.22 um 10:40 schrieb Thomas Zimmermann:
> Hi Christian
>
> Am 12.07.22 um 12:28 schrieb Christian König:
>> This reverts commit 8f61973718485f3e89bc4f408f929048b7b47c83.
>
> I only found this commit in drm-misc-next. Should the revert be 
> cherry-picked into drm-misc-next-fixes?

yes for all three patches you just pinged me.

I've already tried to push them to drm-misc-next-fixes, but the patches 
somehow wouldn't apply. I think the -next-fixes branch was somehow 
lagging behind.

Thanks,
Christian.

>
> Best regards
> Thomas
>
>>
>> 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 at amd.com>
>> ---
>>   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,
>



More information about the dri-devel mailing list