Lines Matching refs:syncobj
69 struct drm_syncobj *syncobj; in drm_syncobj_find() local
74 syncobj = idr_find(&file_private->syncobj_idr, handle); in drm_syncobj_find()
75 if (syncobj) in drm_syncobj_find()
76 drm_syncobj_get(syncobj); in drm_syncobj_find()
80 return syncobj; in drm_syncobj_find()
84 static void drm_syncobj_add_callback_locked(struct drm_syncobj *syncobj, in drm_syncobj_add_callback_locked() argument
89 list_add_tail(&cb->node, &syncobj->cb_list); in drm_syncobj_add_callback_locked()
93 static int drm_syncobj_fence_get_or_add_callback(struct drm_syncobj *syncobj,
100 *fence = drm_syncobj_fence_get(syncobj);
104 lockmgr(&syncobj->lock, LK_EXCLUSIVE);
109 if (syncobj->fence) {
110 *fence = dma_fence_get(syncobj->fence);
114 drm_syncobj_add_callback_locked(syncobj, cb, func);
117 lockmgr(&syncobj->lock, LK_RELEASE);
131 void drm_syncobj_add_callback(struct drm_syncobj *syncobj, in drm_syncobj_add_callback() argument
135 lockmgr(&syncobj->lock, LK_EXCLUSIVE); in drm_syncobj_add_callback()
136 drm_syncobj_add_callback_locked(syncobj, cb, func); in drm_syncobj_add_callback()
137 lockmgr(&syncobj->lock, LK_RELEASE); in drm_syncobj_add_callback()
146 void drm_syncobj_remove_callback(struct drm_syncobj *syncobj, in drm_syncobj_remove_callback() argument
149 lockmgr(&syncobj->lock, LK_EXCLUSIVE); in drm_syncobj_remove_callback()
151 lockmgr(&syncobj->lock, LK_RELEASE); in drm_syncobj_remove_callback()
162 void drm_syncobj_replace_fence(struct drm_syncobj *syncobj, in drm_syncobj_replace_fence() argument
171 lockmgr(&syncobj->lock, LK_EXCLUSIVE); in drm_syncobj_replace_fence()
173 old_fence = syncobj->fence; in drm_syncobj_replace_fence()
174 syncobj->fence = fence; in drm_syncobj_replace_fence()
177 list_for_each_entry_safe(cur, tmp, &syncobj->cb_list, node) { in drm_syncobj_replace_fence()
179 cur->func(syncobj, cur); in drm_syncobj_replace_fence()
183 lockmgr(&syncobj->lock, LK_RELEASE); in drm_syncobj_replace_fence()
213 static int drm_syncobj_assign_null_handle(struct drm_syncobj *syncobj) in drm_syncobj_assign_null_handle() argument
225 drm_syncobj_replace_fence(syncobj, &fence->base); in drm_syncobj_assign_null_handle()
236 struct drm_syncobj *syncobj = drm_syncobj_find(file_private, handle); in drm_syncobj_find_fence() local
239 if (!syncobj) in drm_syncobj_find_fence()
242 *fence = drm_syncobj_fence_get(syncobj); in drm_syncobj_find_fence()
246 drm_syncobj_put(syncobj); in drm_syncobj_find_fence()
259 struct drm_syncobj *syncobj = container_of(kref, in drm_syncobj_free() local
262 drm_syncobj_replace_fence(syncobj, NULL); in drm_syncobj_free()
263 kfree(syncobj); in drm_syncobj_free()
277 struct drm_syncobj *syncobj; in drm_syncobj_create() local
279 syncobj = kzalloc(sizeof(struct drm_syncobj), GFP_KERNEL); in drm_syncobj_create()
280 if (!syncobj) in drm_syncobj_create()
283 kref_init(&syncobj->refcount); in drm_syncobj_create()
284 INIT_LIST_HEAD(&syncobj->cb_list); in drm_syncobj_create()
285 lockinit(&syncobj->lock, "dsol", 0, 0); in drm_syncobj_create()
288 ret = drm_syncobj_assign_null_handle(syncobj); in drm_syncobj_create()
290 drm_syncobj_put(syncobj); in drm_syncobj_create()
296 drm_syncobj_replace_fence(syncobj, fence); in drm_syncobj_create()
298 *out_syncobj = syncobj; in drm_syncobj_create()
307 struct drm_syncobj *syncobj, u32 *handle) in drm_syncobj_get_handle() argument
312 drm_syncobj_get(syncobj); in drm_syncobj_get_handle()
316 ret = idr_alloc(&file_private->syncobj_idr, syncobj, 1, 0, GFP_NOWAIT); in drm_syncobj_get_handle()
322 drm_syncobj_put(syncobj); in drm_syncobj_get_handle()
335 struct drm_syncobj *syncobj; in drm_syncobj_create_as_handle() local
337 ret = drm_syncobj_create(&syncobj, flags, NULL); in drm_syncobj_create_as_handle()
341 ret = drm_syncobj_get_handle(file_private, syncobj, handle); in drm_syncobj_create_as_handle()
342 drm_syncobj_put(syncobj); in drm_syncobj_create_as_handle()
349 struct drm_syncobj *syncobj; in drm_syncobj_destroy() local
352 syncobj = idr_remove(&file_private->syncobj_idr, handle); in drm_syncobj_destroy()
355 if (!syncobj) in drm_syncobj_destroy()
358 drm_syncobj_put(syncobj); in drm_syncobj_destroy()
365 struct drm_syncobj *syncobj = file->private_data;
367 drm_syncobj_put(syncobj);
376 int drm_syncobj_get_fd(struct drm_syncobj *syncobj, int *p_fd) in drm_syncobj_get_fd() argument
388 syncobj, 0); in drm_syncobj_get_fd()
397 drm_syncobj_get(syncobj); in drm_syncobj_get_fd()
408 struct drm_syncobj *syncobj = drm_syncobj_find(file_private, handle); in drm_syncobj_handle_to_fd() local
411 if (!syncobj) in drm_syncobj_handle_to_fd()
414 ret = drm_syncobj_get_fd(syncobj, p_fd); in drm_syncobj_handle_to_fd()
415 drm_syncobj_put(syncobj); in drm_syncobj_handle_to_fd()
440 struct drm_syncobj *syncobj; in drm_syncobj_fd_to_handle()
454 syncobj = file->private_data; in drm_syncobj_fd_to_handle()
455 drm_syncobj_get(syncobj); in drm_syncobj_fd_to_handle()
459 ret = idr_alloc(&file_private->syncobj_idr, syncobj, 1, 0, GFP_NOWAIT); in drm_syncobj_fd_to_handle()
467 drm_syncobj_put(syncobj); in drm_syncobj_fd_to_handle()
479 struct drm_syncobj *syncobj; in drm_syncobj_import_sync_file_fence() local
484 syncobj = drm_syncobj_find(file_private, handle); in drm_syncobj_import_sync_file_fence()
485 if (!syncobj) { in drm_syncobj_import_sync_file_fence()
490 drm_syncobj_replace_fence(syncobj, fence); in drm_syncobj_import_sync_file_fence()
492 drm_syncobj_put(syncobj); in drm_syncobj_import_sync_file_fence()
545 struct drm_syncobj *syncobj = ptr; in drm_syncobj_release_handle() local
547 drm_syncobj_put(syncobj); in drm_syncobj_release_handle()
665 static void syncobj_wait_syncobj_func(struct drm_syncobj *syncobj,
672 wait->fence = dma_fence_get(syncobj->fence);