mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
synced 2025-01-09 15:29:16 +00:00
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: 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-2-christian.koenig@amd.com
This commit is contained in:
parent
ea181a3494
commit
976b6d97c6
@ -45,19 +45,6 @@ struct dma_fence_array {
|
||||
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
|
||||
* @fence: fence to cast to a dma_fence_array
|
||||
@ -68,7 +55,7 @@ static inline bool dma_fence_is_array(struct dma_fence *fence)
|
||||
static inline struct dma_fence_array *
|
||||
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 container_of(fence, struct dma_fence_array, base);
|
||||
|
@ -49,7 +49,6 @@ struct dma_fence_chain {
|
||||
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
|
||||
@ -61,7 +60,7 @@ extern const struct dma_fence_ops dma_fence_chain_ops;
|
||||
static inline struct dma_fence_chain *
|
||||
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 container_of(fence, struct dma_fence_chain, base);
|
||||
|
@ -587,4 +587,42 @@ struct dma_fence *dma_fence_get_stub(void);
|
||||
struct dma_fence *dma_fence_allocate_private_stub(void);
|
||||
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 */
|
||||
|
Loading…
x
Reference in New Issue
Block a user