[Linaro-mm-sig] Re: [PATCH] dma-buf: fix check in dma_resv_add_fence
Thomas Hellström (Intel)
thomas_os at shipmail.org
Mon Nov 27 16:47:58 UTC 2023
On 11/27/23 14:24, Christian König wrote:
> Ping? Can I get an rb or acked-by for that?
>
> Thanks,
> Christian.
>
> Am 15.11.23 um 10:30 schrieb Christian König:
>> It's valid to add the same fence multiple times to a dma-resv object and
>> we shouldn't need one extra slot for each.
>>
>> Signed-off-by: Christian König <christian.koenig at amd.com>
>> Fixes: a3f7c10a269d5 ("dma-buf/dma-resv: check if the new fence is
>> really later")
>> Cc: stable at vger.kernel.org # v5.19+
Reviewed-by: Thomas Hellström <thomas.hellstrom at linux.intel.com>
>> ---
>> drivers/dma-buf/dma-resv.c | 2 +-
>> include/linux/dma-fence.h | 15 +++++++++++++++
>> 2 files changed, 16 insertions(+), 1 deletion(-)
>>
>> diff --git a/drivers/dma-buf/dma-resv.c b/drivers/dma-buf/dma-resv.c
>> index 38b4110378de..eb8b733065b2 100644
>> --- a/drivers/dma-buf/dma-resv.c
>> +++ b/drivers/dma-buf/dma-resv.c
>> @@ -301,7 +301,7 @@ void dma_resv_add_fence(struct dma_resv *obj,
>> struct dma_fence *fence,
>> dma_resv_list_entry(fobj, i, obj, &old, &old_usage);
>> if ((old->context == fence->context && old_usage >= usage &&
>> - dma_fence_is_later(fence, old)) ||
>> + dma_fence_is_later_or_same(fence, old)) ||
>> dma_fence_is_signaled(old)) {
>> dma_resv_list_set(fobj, i, fence, usage);
>> dma_fence_put(old);
>> diff --git a/include/linux/dma-fence.h b/include/linux/dma-fence.h
>> index ebe78bd3d121..b3772edca2e6 100644
>> --- a/include/linux/dma-fence.h
>> +++ b/include/linux/dma-fence.h
>> @@ -498,6 +498,21 @@ static inline bool dma_fence_is_later(struct
>> dma_fence *f1,
>> return __dma_fence_is_later(f1->seqno, f2->seqno, f1->ops);
>> }
>> +/**
>> + * dma_fence_is_later_or_same - return true if f1 is later or same
>> as f2
>> + * @f1: the first fence from the same context
>> + * @f2: the second fence from the same context
>> + *
>> + * Returns true if f1 is chronologically later than f2 or the same
>> fence. Both
>> + * fences must be from the same context, since a seqno is not
>> re-used across
>> + * contexts.
>> + */
>> +static inline bool dma_fence_is_later_or_same(struct dma_fence *f1,
>> + struct dma_fence *f2)
>> +{
>> + return f1 == f2 || dma_fence_is_later(f1, f2);
>> +}
>> +
>> /**
>> * dma_fence_later - return the chronologically later fence
>> * @f1: the first fence from the same context
>
> _______________________________________________
> Linaro-mm-sig mailing list -- linaro-mm-sig at lists.linaro.org
> To unsubscribe send an email to linaro-mm-sig-leave at lists.linaro.org
More information about the dri-devel
mailing list