Commit 18f5fad2 authored by Christian König's avatar Christian König

dma-buf: add dma_fence_chain_contained helper

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: default avatarChristian König <christian.koenig@amd.com>
Reviewed-by: default avatarThomas Hellström <thomas.hellstrom@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20220204100429.2049-6-christian.koenig@amd.com
parent 68129f43
...@@ -148,8 +148,7 @@ static bool dma_fence_chain_enable_signaling(struct dma_fence *fence) ...@@ -148,8 +148,7 @@ static bool dma_fence_chain_enable_signaling(struct dma_fence *fence)
dma_fence_get(&head->base); dma_fence_get(&head->base);
dma_fence_chain_for_each(fence, &head->base) { dma_fence_chain_for_each(fence, &head->base) {
struct dma_fence_chain *chain = to_dma_fence_chain(fence); struct dma_fence *f = dma_fence_chain_contained(fence);
struct dma_fence *f = chain ? chain->fence : fence;
dma_fence_get(f); dma_fence_get(f);
if (!dma_fence_add_callback(f, &head->cb, dma_fence_chain_cb)) { 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) ...@@ -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) static bool dma_fence_chain_signaled(struct dma_fence *fence)
{ {
dma_fence_chain_for_each(fence, fence) { dma_fence_chain_for_each(fence, fence) {
struct dma_fence_chain *chain = to_dma_fence_chain(fence); struct dma_fence *f = dma_fence_chain_contained(fence);
struct dma_fence *f = chain ? chain->fence : fence;
if (!dma_fence_is_signaled(f)) { if (!dma_fence_is_signaled(f)) {
dma_fence_put(fence); dma_fence_put(fence);
......
...@@ -66,6 +66,21 @@ to_dma_fence_chain(struct dma_fence *fence) ...@@ -66,6 +66,21 @@ to_dma_fence_chain(struct dma_fence *fence)
return container_of(fence, struct dma_fence_chain, base); 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 * dma_fence_chain_alloc
* *
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment