dma-buf: fix check in dma_resv_add_fence
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@amd.com>
Reviewed-by: Thomas Hellström <thomas.hellstrom@linux.intel.com>
Fixes: a3f7c10a26
("dma-buf/dma-resv: check if the new fence is really later")
Cc: stable@vger.kernel.org # v5.19+
Link: https://patchwork.freedesktop.org/patch/msgid/20231115093035.1889-1-christian.koenig@amd.com
This commit is contained in:
parent
1d5e8f4bf0
commit
95ba893c9f
@ -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);
|
dma_resv_list_entry(fobj, i, obj, &old, &old_usage);
|
||||||
if ((old->context == fence->context && old_usage >= 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_fence_is_signaled(old)) {
|
||||||
dma_resv_list_set(fobj, i, fence, usage);
|
dma_resv_list_set(fobj, i, fence, usage);
|
||||||
dma_fence_put(old);
|
dma_fence_put(old);
|
||||||
|
@ -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);
|
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
|
* dma_fence_later - return the chronologically later fence
|
||||||
* @f1: the first fence from the same context
|
* @f1: the first fence from the same context
|
||||||
|
Loading…
Reference in New Issue
Block a user