Lines Matching full:sync

103 			struct xe_sync_entry *sync,  in xe_sync_entry_parse()  argument
130 sync->syncobj = drm_syncobj_find(xef->drm, sync_in.handle); in xe_sync_entry_parse()
131 if (XE_IOCTL_DBG(xe, !sync->syncobj)) in xe_sync_entry_parse()
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()
151 sync->syncobj = drm_syncobj_find(xef->drm, sync_in.handle); in xe_sync_entry_parse()
152 if (XE_IOCTL_DBG(xe, !sync->syncobj)) in xe_sync_entry_parse()
156 sync->chain_fence = dma_fence_chain_alloc(); in xe_sync_entry_parse()
157 if (!sync->chain_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()
182 sync->addr = sync_in.addr; in xe_sync_entry_parse()
184 sync->ufence = user_fence_create(xe, sync_in.addr, in xe_sync_entry_parse()
186 if (XE_IOCTL_DBG(xe, !sync->ufence)) in xe_sync_entry_parse()
196 sync->type = sync_in.type; in xe_sync_entry_parse()
197 sync->flags = sync_in.flags; in xe_sync_entry_parse()
198 sync->timeline_value = sync_in.timeline_value; in xe_sync_entry_parse()
203 int xe_sync_entry_wait(struct xe_sync_entry *sync) in xe_sync_entry_wait() argument
205 if (sync->fence) in xe_sync_entry_wait()
206 dma_fence_wait(sync->fence, true); in xe_sync_entry_wait()
211 int xe_sync_entry_add_deps(struct xe_sync_entry *sync, struct xe_sched_job *job) in xe_sync_entry_add_deps() argument
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()
227 void xe_sync_entry_signal(struct xe_sync_entry *sync, struct xe_sched_job *job, in xe_sync_entry_signal() argument
230 if (!(sync->flags & DRM_XE_SYNC_FLAG_SIGNAL)) in xe_sync_entry_signal()
233 if (sync->chain_fence) { in xe_sync_entry_signal()
234 drm_syncobj_add_point(sync->syncobj, sync->chain_fence, in xe_sync_entry_signal()
235 fence, sync->timeline_value); in xe_sync_entry_signal()
240 sync->chain_fence = NULL; in xe_sync_entry_signal()
241 } else if (sync->syncobj) { in xe_sync_entry_signal()
242 drm_syncobj_replace_fence(sync->syncobj, fence); in xe_sync_entry_signal()
243 } else if (sync->ufence) { in xe_sync_entry_signal()
247 user_fence_get(sync->ufence); 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()
254 user_fence_put(sync->ufence); in xe_sync_entry_signal()
257 } else if (sync->type == DRM_XE_SYNC_TYPE_USER_FENCE) { in xe_sync_entry_signal()
259 job->user_fence.addr = sync->addr; in xe_sync_entry_signal()
260 job->user_fence.value = sync->timeline_value; in xe_sync_entry_signal()
264 void xe_sync_entry_cleanup(struct xe_sync_entry *sync) in xe_sync_entry_cleanup() argument
266 if (sync->syncobj) in xe_sync_entry_cleanup()
267 drm_syncobj_put(sync->syncobj); in xe_sync_entry_cleanup()
268 if (sync->fence) in xe_sync_entry_cleanup()
269 dma_fence_put(sync->fence); in xe_sync_entry_cleanup()
270 if (sync->chain_fence) in xe_sync_entry_cleanup()
271 dma_fence_put(&sync->chain_fence->base); in xe_sync_entry_cleanup()
272 if (sync->ufence) in xe_sync_entry_cleanup()
273 user_fence_put(sync->ufence); in xe_sync_entry_cleanup()
278 * @sync: input syncs
291 xe_sync_in_fence_get(struct xe_sync_entry *sync, int num_sync, in xe_sync_in_fence_get() argument
303 if (sync[i].fence) { in xe_sync_in_fence_get()
305 fence = sync[i].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
348 * @sync: input sync
350 * Get a user fence reference from sync.
354 struct xe_user_fence *xe_sync_ufence_get(struct xe_sync_entry *sync) in xe_sync_ufence_get() argument
356 user_fence_get(sync->ufence); in xe_sync_ufence_get()
358 return sync->ufence; in xe_sync_ufence_get()