Lines Matching full:fence
8 #include <linux/dma-fence-array.h>
88 static void kick_ufence(struct xe_user_fence *ufence, struct dma_fence *fence) in kick_ufence() argument
92 dma_fence_put(fence); in kick_ufence()
95 static void user_fence_cb(struct dma_fence *fence, struct dma_fence_cb *cb) in user_fence_cb() argument
99 kick_ufence(ufence, fence); in user_fence_cb()
135 sync->fence = drm_syncobj_fence_get(sync->syncobj); in xe_sync_entry_parse()
136 if (XE_IOCTL_DBG(xe, !sync->fence)) in xe_sync_entry_parse()
160 sync->fence = drm_syncobj_fence_get(sync->syncobj); in xe_sync_entry_parse()
161 if (XE_IOCTL_DBG(xe, !sync->fence)) in xe_sync_entry_parse()
164 err = dma_fence_chain_find_seqno(&sync->fence, in xe_sync_entry_parse()
205 if (sync->fence) in xe_sync_entry_wait()
206 dma_fence_wait(sync->fence, true); in xe_sync_entry_wait()
215 if (sync->fence) { in xe_sync_entry_add_deps()
217 dma_fence_get(sync->fence)); in xe_sync_entry_add_deps()
219 dma_fence_put(sync->fence); in xe_sync_entry_add_deps()
228 struct dma_fence *fence) in xe_sync_entry_signal() argument
235 fence, sync->timeline_value); in xe_sync_entry_signal()
242 drm_syncobj_replace_fence(sync->syncobj, fence); in xe_sync_entry_signal()
246 dma_fence_get(fence); in xe_sync_entry_signal()
248 err = dma_fence_add_callback(fence, &sync->ufence->cb, in xe_sync_entry_signal()
251 kick_ufence(sync->ufence, fence); in xe_sync_entry_signal()
253 XE_WARN_ON("failed to add user fence"); in xe_sync_entry_signal()
255 dma_fence_put(fence); in xe_sync_entry_signal()
268 if (sync->fence) in xe_sync_entry_cleanup()
269 dma_fence_put(sync->fence); in xe_sync_entry_cleanup()
277 * xe_sync_in_fence_get() - Get a fence from syncs, exec queue, and VM
283 * Get a fence from syncs, exec queue, and VM. If syncs contain in-fences create
284 * and return a composite fence of all in-fences + last fence. If no in-fences
285 * return last fence on input exec queue. Caller must drop reference to
286 * returned fence.
288 * Return: fence on success, ERR_PTR(-ENOMEM) on failure
296 struct dma_fence *fence; in xe_sync_in_fence_get() local
303 if (sync[i].fence) { in xe_sync_in_fence_get()
305 fence = sync[i].fence; in xe_sync_in_fence_get()
311 fence = xe_exec_queue_last_fence_get(q, vm); in xe_sync_in_fence_get()
312 return fence; in xe_sync_in_fence_get()
315 /* Create composite fence */ in xe_sync_in_fence_get()
320 if (sync[i].fence) { in xe_sync_in_fence_get()
321 dma_fence_get(sync[i].fence); in xe_sync_in_fence_get()
322 fences[current_fence++] = sync[i].fence; in xe_sync_in_fence_get()
347 * xe_sync_ufence_get() - Get user fence from sync
350 * Get a user fence reference from sync.
362 * xe_sync_ufence_put() - Put user fence reference
363 * @ufence: user fence reference
372 * xe_sync_ufence_get_status() - Get user fence status
373 * @ufence: user fence