Message ID | 20231115093035.1889-1-christian.koenig@amd.com |
---|---|
State | New |
Headers | show |
Series | dma-buf: fix check in dma_resv_add_fence | expand |
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@amd.com> > Fixes: a3f7c10a269d5 ("dma-buf/dma-resv: check if the new fence is really later") > Cc: stable@vger.kernel.org # v5.19+ > --- > 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
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@amd.com> >> Fixes: a3f7c10a269d5 ("dma-buf/dma-resv: check if the new fence is >> really later") >> Cc: stable@vger.kernel.org # v5.19+ Reviewed-by: Thomas Hellström <thomas.hellstrom@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@lists.linaro.org > To unsubscribe send an email to linaro-mm-sig-leave@lists.linaro.org
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
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> Fixes: a3f7c10a269d5 ("dma-buf/dma-resv: check if the new fence is really later") Cc: stable@vger.kernel.org # v5.19+ --- drivers/dma-buf/dma-resv.c | 2 +- include/linux/dma-fence.h | 15 +++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-)