Lines Matching full:sync
114 struct xe_sync_entry *sync, in xe_sync_entry_parse() argument
141 sync->syncobj = drm_syncobj_find(xef->drm, sync_in.handle); in xe_sync_entry_parse()
142 if (XE_IOCTL_DBG(xe, !sync->syncobj)) in xe_sync_entry_parse()
146 sync->fence = drm_syncobj_fence_get(sync->syncobj); in xe_sync_entry_parse()
147 if (XE_IOCTL_DBG(xe, !sync->fence)) in xe_sync_entry_parse()
162 sync->syncobj = drm_syncobj_find(xef->drm, sync_in.handle); in xe_sync_entry_parse()
163 if (XE_IOCTL_DBG(xe, !sync->syncobj)) in xe_sync_entry_parse()
167 sync->chain_fence = dma_fence_chain_alloc(); in xe_sync_entry_parse()
168 if (!sync->chain_fence) in xe_sync_entry_parse()
171 sync->fence = drm_syncobj_fence_get(sync->syncobj); in xe_sync_entry_parse()
172 if (XE_IOCTL_DBG(xe, !sync->fence)) in xe_sync_entry_parse()
175 err = dma_fence_chain_find_seqno(&sync->fence, in xe_sync_entry_parse()
193 sync->addr = sync_in.addr; in xe_sync_entry_parse()
195 sync->ufence = user_fence_create(xe, sync_in.addr, in xe_sync_entry_parse()
197 if (XE_IOCTL_DBG(xe, IS_ERR(sync->ufence))) in xe_sync_entry_parse()
198 return PTR_ERR(sync->ufence); in xe_sync_entry_parse()
207 sync->type = sync_in.type; in xe_sync_entry_parse()
208 sync->flags = sync_in.flags; in xe_sync_entry_parse()
209 sync->timeline_value = sync_in.timeline_value; in xe_sync_entry_parse()
214 int xe_sync_entry_add_deps(struct xe_sync_entry *sync, struct xe_sched_job *job) in xe_sync_entry_add_deps() argument
216 if (sync->fence) in xe_sync_entry_add_deps()
218 dma_fence_get(sync->fence)); in xe_sync_entry_add_deps()
223 void xe_sync_entry_signal(struct xe_sync_entry *sync, struct dma_fence *fence) in xe_sync_entry_signal() argument
225 if (!(sync->flags & DRM_XE_SYNC_FLAG_SIGNAL)) in xe_sync_entry_signal()
228 if (sync->chain_fence) { in xe_sync_entry_signal()
229 drm_syncobj_add_point(sync->syncobj, sync->chain_fence, in xe_sync_entry_signal()
230 fence, sync->timeline_value); in xe_sync_entry_signal()
235 sync->chain_fence = NULL; in xe_sync_entry_signal()
236 } else if (sync->syncobj) { in xe_sync_entry_signal()
237 drm_syncobj_replace_fence(sync->syncobj, fence); in xe_sync_entry_signal()
238 } else if (sync->ufence) { in xe_sync_entry_signal()
242 user_fence_get(sync->ufence); in xe_sync_entry_signal()
243 err = dma_fence_add_callback(fence, &sync->ufence->cb, in xe_sync_entry_signal()
246 kick_ufence(sync->ufence, fence); in xe_sync_entry_signal()
249 user_fence_put(sync->ufence); in xe_sync_entry_signal()
255 void xe_sync_entry_cleanup(struct xe_sync_entry *sync) in xe_sync_entry_cleanup() argument
257 if (sync->syncobj) in xe_sync_entry_cleanup()
258 drm_syncobj_put(sync->syncobj); in xe_sync_entry_cleanup()
259 dma_fence_put(sync->fence); in xe_sync_entry_cleanup()
260 dma_fence_chain_free(sync->chain_fence); in xe_sync_entry_cleanup()
261 if (sync->ufence) in xe_sync_entry_cleanup()
262 user_fence_put(sync->ufence); in xe_sync_entry_cleanup()
267 * @sync: input syncs
280 xe_sync_in_fence_get(struct xe_sync_entry *sync, int num_sync, in xe_sync_in_fence_get() argument
292 if (sync[i].fence) { in xe_sync_in_fence_get()
294 fence = sync[i].fence; in xe_sync_in_fence_get()
309 if (sync[i].fence) { in xe_sync_in_fence_get()
310 dma_fence_get(sync[i].fence); in xe_sync_in_fence_get()
311 fences[current_fence++] = sync[i].fence; in xe_sync_in_fence_get()
351 * xe_sync_ufence_get() - Get user fence from sync
352 * @sync: input sync
354 * Get a user fence reference from sync.
358 struct xe_user_fence *xe_sync_ufence_get(struct xe_sync_entry *sync) in xe_sync_ufence_get() argument
360 user_fence_get(sync->ufence); in xe_sync_ufence_get()
362 return sync->ufence; in xe_sync_ufence_get()