Skip to content

Commit

Permalink
UPSTREAM: dma-buf: add dma_fence_chain_contained helper
Browse files Browse the repository at this point in the history
It's a reoccurring pattern that we need to extract the fence
from a dma_fence_chain object. Add a helper for this.

Bug: 286102048
Change-Id: Ib94b7f26893ca39ee3c3a58c335d30a7787facc2
Signed-off-by: Christian König <christian.koenig@amd.com>
Reviewed-by: Thomas Hellström <thomas.hellstrom@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20220204100429.2049-6-christian.koenig@amd.com
(cherry picked from commit 18f5fad275efef015226ee4f90eae34d8f44aa5e)
Signed-off-by: Richard Fung <richardfung@google.com>
  • Loading branch information
ChristianKoenigAMD authored and toddkjos committed Nov 15, 2023
1 parent a2a56bf commit 20b2d56
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 4 deletions.
6 changes: 2 additions & 4 deletions drivers/dma-buf/dma-fence-chain.c
Original file line number Diff line number Diff line change
Expand Up @@ -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)) {
Expand All @@ -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);
Expand Down
15 changes: 15 additions & 0 deletions include/linux/dma-fence-chain.h
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,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
*
Expand Down

0 comments on commit 20b2d56

Please sign in to comment.