dma-buf/fence: add fence_is_later()
Return true when fence 1 is later than fence 2 without checking if any of them are signaled. Useful for driver specific resource handling based on fences. Signed-off-by: Christian König <christian.koenig@amd.com> Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
a519435a96
commit
6c455ac17b
|
@ -279,6 +279,22 @@ fence_is_signaled(struct fence *fence)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* fence_is_later - return if f1 is chronologically later than f2
|
||||||
|
* @f1: [in] the first fence from the same context
|
||||||
|
* @f2: [in] the second fence from the same context
|
||||||
|
*
|
||||||
|
* Returns true if f1 is chronologically later than f2. Both fences must be
|
||||||
|
* from the same context, since a seqno is not re-used across contexts.
|
||||||
|
*/
|
||||||
|
static inline bool fence_is_later(struct fence *f1, struct fence *f2)
|
||||||
|
{
|
||||||
|
if (WARN_ON(f1->context != f2->context))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return f1->seqno - f2->seqno < INT_MAX;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* fence_later - return the chronologically later fence
|
* fence_later - return the chronologically later fence
|
||||||
* @f1: [in] the first fence from the same context
|
* @f1: [in] the first fence from the same context
|
||||||
|
@ -298,10 +314,10 @@ static inline struct fence *fence_later(struct fence *f1, struct fence *f2)
|
||||||
* set if enable_signaling wasn't called, and enabling that here is
|
* set if enable_signaling wasn't called, and enabling that here is
|
||||||
* overkill.
|
* overkill.
|
||||||
*/
|
*/
|
||||||
if (f2->seqno - f1->seqno <= INT_MAX)
|
if (fence_is_later(f1, f2))
|
||||||
return fence_is_signaled(f2) ? NULL : f2;
|
|
||||||
else
|
|
||||||
return fence_is_signaled(f1) ? NULL : f1;
|
return fence_is_signaled(f1) ? NULL : f1;
|
||||||
|
else
|
||||||
|
return fence_is_signaled(f2) ? NULL : f2;
|
||||||
}
|
}
|
||||||
|
|
||||||
signed long fence_wait_timeout(struct fence *, bool intr, signed long timeout);
|
signed long fence_wait_timeout(struct fence *, bool intr, signed long timeout);
|
||||||
|
|
Loading…
Reference in a new issue