Lines Matching full:fence
38 static const char *vgem_fence_get_driver_name(struct dma_fence *fence) in vgem_fence_get_driver_name() argument
43 static const char *vgem_fence_get_timeline_name(struct dma_fence *fence) in vgem_fence_get_timeline_name() argument
50 struct vgem_fence *fence = container_of(base, typeof(*fence), base); in vgem_fence_release() local
52 del_timer_sync(&fence->timer); in vgem_fence_release()
53 dma_fence_free(&fence->base); in vgem_fence_release()
56 static void vgem_fence_value_str(struct dma_fence *fence, char *str, int size) in vgem_fence_value_str() argument
58 snprintf(str, size, "%llu", fence->seqno); in vgem_fence_value_str()
61 static void vgem_fence_timeline_value_str(struct dma_fence *fence, char *str, in vgem_fence_timeline_value_str() argument
65 dma_fence_is_signaled(fence) ? fence->seqno : 0); in vgem_fence_timeline_value_str()
79 struct vgem_fence *fence = from_timer(fence, t, timer); in vgem_fence_timeout() local
81 dma_fence_signal(&fence->base); in vgem_fence_timeout()
87 struct vgem_fence *fence; in vgem_fence_create() local
89 fence = kzalloc(sizeof(*fence), GFP_KERNEL); in vgem_fence_create()
90 if (!fence) in vgem_fence_create()
93 spin_lock_init(&fence->lock); in vgem_fence_create()
94 dma_fence_init(&fence->base, &vgem_fence_ops, &fence->lock, in vgem_fence_create()
97 timer_setup(&fence->timer, vgem_fence_timeout, 0); in vgem_fence_create()
99 /* We force the fence to expire within 10s to prevent driver hangs */ in vgem_fence_create()
100 mod_timer(&fence->timer, jiffies + VGEM_FENCE_TIMEOUT); in vgem_fence_create()
102 return &fence->base; in vgem_fence_create()
108 * Create and attach a fence to the vGEM handle. This fence is then exposed
110 * dma-buf. If the flags contain VGEM_FENCE_WRITE, the fence indicates the
112 * fence, otherwise the fence indicates the client is current reading from the
114 * completion. Note that if a conflicting fence is already on the dma-buf (i.e.
115 * an exclusive fence when adding a read, or any fence when adding a write),
119 * This returns the handle for the new fence that must be signaled within 10
134 struct dma_fence *fence; in vgem_fence_attach_ioctl() local
147 fence = vgem_fence_create(vfile, arg->flags); in vgem_fence_attach_ioctl()
148 if (!fence) { in vgem_fence_attach_ioctl()
153 /* Check for a conflicting fence */ in vgem_fence_attach_ioctl()
161 /* Expose the fence via the dma-buf */ in vgem_fence_attach_ioctl()
165 dma_resv_add_fence(resv, fence, arg->flags & VGEM_FENCE_WRITE ? in vgem_fence_attach_ioctl()
169 /* Record the fence in our idr for later signaling */ in vgem_fence_attach_ioctl()
172 ret = idr_alloc(&vfile->fence_idr, fence, 1, 0, GFP_KERNEL); in vgem_fence_attach_ioctl()
181 dma_fence_signal(fence); in vgem_fence_attach_ioctl()
182 dma_fence_put(fence); in vgem_fence_attach_ioctl()
192 * Signal and consume a fence ealier attached to a vGEM handle using
198 * Signaling a fence indicates to all consumers of the dma-buf that the
199 * client has completed the operation associated with the fence, and that the
202 * If the fence does not exist (or has already been signaled by the client),
211 struct dma_fence *fence; in vgem_fence_signal_ioctl() local
218 fence = idr_replace(&vfile->fence_idr, NULL, arg->fence); in vgem_fence_signal_ioctl()
220 if (!fence) in vgem_fence_signal_ioctl()
222 if (IS_ERR(fence)) in vgem_fence_signal_ioctl()
223 return PTR_ERR(fence); in vgem_fence_signal_ioctl()
225 if (dma_fence_is_signaled(fence)) in vgem_fence_signal_ioctl()
228 dma_fence_signal(fence); in vgem_fence_signal_ioctl()
229 dma_fence_put(fence); in vgem_fence_signal_ioctl()