On Thu, Jun 23, 2016 at 12:29:48PM -0300, Gustavo Padovan wrote: > From: Gustavo Padovan <gustavo.padovan@xxxxxxxxxxxxxxx> > > get_fences() should return a copy of all fences in the fence as some > fence subclass (such as fence_array) can store more than one fence at > time. > > Signed-off-by: Gustavo Padovan <gustavo.padovan@xxxxxxxxxxxxxxx> > --- > drivers/dma-buf/fence.c | 14 ++++++++++++++ > include/linux/fence.h | 3 +++ > 2 files changed, 17 insertions(+) > > diff --git a/drivers/dma-buf/fence.c b/drivers/dma-buf/fence.c > index 4e61afb..f4094fd 100644 > --- a/drivers/dma-buf/fence.c > +++ b/drivers/dma-buf/fence.c > @@ -185,6 +185,20 @@ void fence_release(struct kref *kref) > } > EXPORT_SYMBOL(fence_release); > kerneldoc missing. -Daniel > +struct fence **fence_get_fences(struct fence *fence) > +{ > + if (fence->ops->get_fences) { > + return fence->ops->get_fences(fence); > + } else { > + struct fence **fences = kmalloc(sizeof(**fences), GFP_KERNEL); > + if (!fences) > + return NULL; > + fences[0] = fence; > + return fences; > + } > +} > +EXPORT_SYMBOL(fence_get_fences); > + > void fence_teardown(struct fence *fence) > { > if (fence->ops->teardown) > diff --git a/include/linux/fence.h b/include/linux/fence.h > index 1d3b671..a7a2fbc 100644 > --- a/include/linux/fence.h > +++ b/include/linux/fence.h > @@ -111,6 +111,7 @@ struct fence_cb { > * struct fence_ops - operations implemented for fence > * @get_driver_name: returns the driver name. > * @get_timeline_name: return the name of the context this fence belongs to. > + * @get_fences: return an array with a copy of all fences in the fence. > * @enable_signaling: enable software signaling of fence. > * @signaled: [optional] peek whether the fence is signaled, can be null. > * @wait: custom wait implementation, or fence_default_wait. > @@ -175,6 +176,7 @@ struct fence_cb { > struct fence_ops { > const char * (*get_driver_name)(struct fence *fence); > const char * (*get_timeline_name)(struct fence *fence); > + struct fence ** (*get_fences)(struct fence *fence); > bool (*enable_signaling)(struct fence *fence); > bool (*signaled)(struct fence *fence); > signed long (*wait)(struct fence *fence, bool intr, signed long timeout); > @@ -189,6 +191,7 @@ struct fence_ops { > void fence_init(struct fence *fence, const struct fence_ops *ops, > spinlock_t *lock, u64 context, unsigned seqno); > > +struct fence **fence_get_fences(struct fence *fence); > void fence_release(struct kref *kref); > void fence_teardown(struct fence *fence); > void fence_free(struct fence *fence); > -- > 2.5.5 > -- Daniel Vetter Software Engineer, Intel Corporation http://blog.ffwll.ch _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/dri-devel