Commit 976b6d97 authored by Christian König's avatar Christian König

dma-buf: consolidate dma_fence subclass checking

Consolidate the wrapper functions to check for dma_fence
subclasses in the dma_fence header.

This makes it easier to document and also check the different
requirements for fence containers in the subclasses.
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-2-christian.koenig@amd.com
parent ea181a34
...@@ -45,19 +45,6 @@ struct dma_fence_array { ...@@ -45,19 +45,6 @@ struct dma_fence_array {
struct irq_work work; struct irq_work work;
}; };
extern const struct dma_fence_ops dma_fence_array_ops;
/**
* dma_fence_is_array - check if a fence is from the array subsclass
* @fence: fence to test
*
* Return true if it is a dma_fence_array and false otherwise.
*/
static inline bool dma_fence_is_array(struct dma_fence *fence)
{
return fence->ops == &dma_fence_array_ops;
}
/** /**
* to_dma_fence_array - cast a fence to a dma_fence_array * to_dma_fence_array - cast a fence to a dma_fence_array
* @fence: fence to cast to a dma_fence_array * @fence: fence to cast to a dma_fence_array
...@@ -68,7 +55,7 @@ static inline bool dma_fence_is_array(struct dma_fence *fence) ...@@ -68,7 +55,7 @@ static inline bool dma_fence_is_array(struct dma_fence *fence)
static inline struct dma_fence_array * static inline struct dma_fence_array *
to_dma_fence_array(struct dma_fence *fence) to_dma_fence_array(struct dma_fence *fence)
{ {
if (fence->ops != &dma_fence_array_ops) if (!fence || !dma_fence_is_array(fence))
return NULL; return NULL;
return container_of(fence, struct dma_fence_array, base); return container_of(fence, struct dma_fence_array, base);
......
...@@ -49,7 +49,6 @@ struct dma_fence_chain { ...@@ -49,7 +49,6 @@ struct dma_fence_chain {
spinlock_t lock; spinlock_t lock;
}; };
extern const struct dma_fence_ops dma_fence_chain_ops;
/** /**
* to_dma_fence_chain - cast a fence to a dma_fence_chain * to_dma_fence_chain - cast a fence to a dma_fence_chain
...@@ -61,7 +60,7 @@ extern const struct dma_fence_ops dma_fence_chain_ops; ...@@ -61,7 +60,7 @@ extern const struct dma_fence_ops dma_fence_chain_ops;
static inline struct dma_fence_chain * static inline struct dma_fence_chain *
to_dma_fence_chain(struct dma_fence *fence) to_dma_fence_chain(struct dma_fence *fence)
{ {
if (!fence || fence->ops != &dma_fence_chain_ops) if (!fence || !dma_fence_is_chain(fence))
return NULL; return NULL;
return container_of(fence, struct dma_fence_chain, base); return container_of(fence, struct dma_fence_chain, base);
......
...@@ -587,4 +587,42 @@ struct dma_fence *dma_fence_get_stub(void); ...@@ -587,4 +587,42 @@ struct dma_fence *dma_fence_get_stub(void);
struct dma_fence *dma_fence_allocate_private_stub(void); struct dma_fence *dma_fence_allocate_private_stub(void);
u64 dma_fence_context_alloc(unsigned num); u64 dma_fence_context_alloc(unsigned num);
extern const struct dma_fence_ops dma_fence_array_ops;
extern const struct dma_fence_ops dma_fence_chain_ops;
/**
* dma_fence_is_array - check if a fence is from the array subclass
* @fence: the fence to test
*
* Return true if it is a dma_fence_array and false otherwise.
*/
static inline bool dma_fence_is_array(struct dma_fence *fence)
{
return fence->ops == &dma_fence_array_ops;
}
/**
* dma_fence_is_chain - check if a fence is from the chain subclass
* @fence: the fence to test
*
* Return true if it is a dma_fence_chain and false otherwise.
*/
static inline bool dma_fence_is_chain(struct dma_fence *fence)
{
return fence->ops == &dma_fence_chain_ops;
}
/**
* dma_fence_is_container - check if a fence is a container for other fences
* @fence: the fence to test
*
* Return true if this fence is a container for other fences, false otherwise.
* This is important since we can't build up large fence structure or otherwise
* we run into recursion during operation on those fences.
*/
static inline bool dma_fence_is_container(struct dma_fence *fence)
{
return dma_fence_is_array(fence) || dma_fence_is_chain(fence);
}
#endif /* __LINUX_DMA_FENCE_H */ #endif /* __LINUX_DMA_FENCE_H */
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