Message ID | 20220204100429.2049-6-christian.koenig@amd.com |
---|---|
State | New |
Headers | show |
Series | [1/6] dma-buf: consolidate dma_fence subclass checking | expand |
On Fri, 2022-02-04 at 11:04 +0100, Christian König wrote: > It's a reoccurring pattern that we need to extract the fence > from a dma_fence_chain object. Add a helper for this. > > Signed-off-by: Christian König <christian.koenig@amd.com> I thought I'd reviewed this one already, but in case I didn't Reviewed-by: Thomas Hellström <thomas.hellstrom@linux.intel.com> > --- > drivers/dma-buf/dma-fence-chain.c | 6 ++---- > include/linux/dma-fence-chain.h | 15 +++++++++++++++ > 2 files changed, 17 insertions(+), 4 deletions(-) > > diff --git a/drivers/dma-buf/dma-fence-chain.c b/drivers/dma-buf/dma- > fence-chain.c > index 084c6927b735..06f8ef97c6e8 100644 > --- a/drivers/dma-buf/dma-fence-chain.c > +++ b/drivers/dma-buf/dma-fence-chain.c > @@ -148,8 +148,7 @@ static bool > dma_fence_chain_enable_signaling(struct dma_fence *fence) > > dma_fence_get(&head->base); > dma_fence_chain_for_each(fence, &head->base) { > - struct dma_fence_chain *chain = > to_dma_fence_chain(fence); > - struct dma_fence *f = chain ? chain->fence : fence; > + struct dma_fence *f = > dma_fence_chain_contained(fence); > > dma_fence_get(f); > if (!dma_fence_add_callback(f, &head->cb, > dma_fence_chain_cb)) { > @@ -165,8 +164,7 @@ static bool > dma_fence_chain_enable_signaling(struct dma_fence *fence) > static bool dma_fence_chain_signaled(struct dma_fence *fence) > { > dma_fence_chain_for_each(fence, fence) { > - struct dma_fence_chain *chain = > to_dma_fence_chain(fence); > - struct dma_fence *f = chain ? chain->fence : fence; > + struct dma_fence *f = > dma_fence_chain_contained(fence); > > if (!dma_fence_is_signaled(f)) { > dma_fence_put(fence); > diff --git a/include/linux/dma-fence-chain.h b/include/linux/dma- > fence-chain.h > index ee906b659694..10d51bcdf7b7 100644 > --- a/include/linux/dma-fence-chain.h > +++ b/include/linux/dma-fence-chain.h > @@ -66,6 +66,21 @@ to_dma_fence_chain(struct dma_fence *fence) > return container_of(fence, struct dma_fence_chain, base); > } > > +/** > + * dma_fence_chain_contained - return the contained fence > + * @fence: the fence to test > + * > + * If the fence is a dma_fence_chain the function returns the fence > contained > + * inside the chain object, otherwise it returns the fence itself. > + */ > +static inline struct dma_fence * > +dma_fence_chain_contained(struct dma_fence *fence) > +{ > + struct dma_fence_chain *chain = to_dma_fence_chain(fence); > + > + return chain ? chain->fence : fence; > +} > + > /** > * dma_fence_chain_alloc > *
diff --git a/drivers/dma-buf/dma-fence-chain.c b/drivers/dma-buf/dma-fence-chain.c index 084c6927b735..06f8ef97c6e8 100644 --- a/drivers/dma-buf/dma-fence-chain.c +++ b/drivers/dma-buf/dma-fence-chain.c @@ -148,8 +148,7 @@ static bool dma_fence_chain_enable_signaling(struct dma_fence *fence) dma_fence_get(&head->base); dma_fence_chain_for_each(fence, &head->base) { - struct dma_fence_chain *chain = to_dma_fence_chain(fence); - struct dma_fence *f = chain ? chain->fence : fence; + struct dma_fence *f = dma_fence_chain_contained(fence); dma_fence_get(f); if (!dma_fence_add_callback(f, &head->cb, dma_fence_chain_cb)) { @@ -165,8 +164,7 @@ static bool dma_fence_chain_enable_signaling(struct dma_fence *fence) static bool dma_fence_chain_signaled(struct dma_fence *fence) { dma_fence_chain_for_each(fence, fence) { - struct dma_fence_chain *chain = to_dma_fence_chain(fence); - struct dma_fence *f = chain ? chain->fence : fence; + struct dma_fence *f = dma_fence_chain_contained(fence); if (!dma_fence_is_signaled(f)) { dma_fence_put(fence); diff --git a/include/linux/dma-fence-chain.h b/include/linux/dma-fence-chain.h index ee906b659694..10d51bcdf7b7 100644 --- a/include/linux/dma-fence-chain.h +++ b/include/linux/dma-fence-chain.h @@ -66,6 +66,21 @@ to_dma_fence_chain(struct dma_fence *fence) return container_of(fence, struct dma_fence_chain, base); } +/** + * dma_fence_chain_contained - return the contained fence + * @fence: the fence to test + * + * If the fence is a dma_fence_chain the function returns the fence contained + * inside the chain object, otherwise it returns the fence itself. + */ +static inline struct dma_fence * +dma_fence_chain_contained(struct dma_fence *fence) +{ + struct dma_fence_chain *chain = to_dma_fence_chain(fence); + + return chain ? chain->fence : fence; +} + /** * dma_fence_chain_alloc *
It's a reoccurring pattern that we need to extract the fence from a dma_fence_chain object. Add a helper for this. Signed-off-by: Christian König <christian.koenig@amd.com> --- drivers/dma-buf/dma-fence-chain.c | 6 ++---- include/linux/dma-fence-chain.h | 15 +++++++++++++++ 2 files changed, 17 insertions(+), 4 deletions(-)