mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-23 09:19:51 +00:00
![Thomas Gleixner](/assets/img/avatar_default.png)
Based on 1 normalized pattern(s): this program is free software you can redistribute it and or modify it under the terms of the gnu general public license version 2 as published by the free software foundation this program is distributed in the hope that it will be useful but without any warranty without even the implied warranty of merchantability or fitness for a particular purpose see the gnu general public license for more details extracted by the scancode license scanner the SPDX license identifier GPL-2.0-only has been chosen to replace the boilerplate/reference in 655 file(s). Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Reviewed-by: Allison Randal <allison@lohutok.net> Reviewed-by: Kate Stewart <kstewart@linuxfoundation.org> Reviewed-by: Richard Fontana <rfontana@redhat.com> Cc: linux-spdx@vger.kernel.org Link: https://lkml.kernel.org/r/20190527070034.575739538@linutronix.de Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
84 lines
2.1 KiB
C
84 lines
2.1 KiB
C
/* SPDX-License-Identifier: GPL-2.0-only */
|
|
/*
|
|
* fence-array: aggregates fence to be waited together
|
|
*
|
|
* Copyright (C) 2016 Collabora Ltd
|
|
* Copyright (C) 2016 Advanced Micro Devices, Inc.
|
|
* Authors:
|
|
* Gustavo Padovan <gustavo@padovan.org>
|
|
* Christian König <christian.koenig@amd.com>
|
|
*/
|
|
|
|
#ifndef __LINUX_DMA_FENCE_ARRAY_H
|
|
#define __LINUX_DMA_FENCE_ARRAY_H
|
|
|
|
#include <linux/dma-fence.h>
|
|
#include <linux/irq_work.h>
|
|
|
|
/**
|
|
* struct dma_fence_array_cb - callback helper for fence array
|
|
* @cb: fence callback structure for signaling
|
|
* @array: reference to the parent fence array object
|
|
*/
|
|
struct dma_fence_array_cb {
|
|
struct dma_fence_cb cb;
|
|
struct dma_fence_array *array;
|
|
};
|
|
|
|
/**
|
|
* struct dma_fence_array - fence to represent an array of fences
|
|
* @base: fence base class
|
|
* @lock: spinlock for fence handling
|
|
* @num_fences: number of fences in the array
|
|
* @num_pending: fences in the array still pending
|
|
* @fences: array of the fences
|
|
* @work: internal irq_work function
|
|
*/
|
|
struct dma_fence_array {
|
|
struct dma_fence base;
|
|
|
|
spinlock_t lock;
|
|
unsigned num_fences;
|
|
atomic_t num_pending;
|
|
struct dma_fence **fences;
|
|
|
|
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
|
|
*
|
|
* Returns NULL if the fence is not a dma_fence_array,
|
|
* or the dma_fence_array otherwise.
|
|
*/
|
|
static inline struct dma_fence_array *
|
|
to_dma_fence_array(struct dma_fence *fence)
|
|
{
|
|
if (fence->ops != &dma_fence_array_ops)
|
|
return NULL;
|
|
|
|
return container_of(fence, struct dma_fence_array, base);
|
|
}
|
|
|
|
struct dma_fence_array *dma_fence_array_create(int num_fences,
|
|
struct dma_fence **fences,
|
|
u64 context, unsigned seqno,
|
|
bool signal_on_any);
|
|
|
|
bool dma_fence_match_context(struct dma_fence *fence, u64 context);
|
|
|
|
#endif /* __LINUX_DMA_FENCE_ARRAY_H */
|