Lines Matching refs:syncobj

70 	struct drm_syncobj *syncobj;  in drm_syncobj_find()  local
75 syncobj = idr_find(&file_private->syncobj_idr, handle); in drm_syncobj_find()
76 if (syncobj) in drm_syncobj_find()
77 drm_syncobj_get(syncobj); in drm_syncobj_find()
81 return syncobj; in drm_syncobj_find()
85 static void drm_syncobj_add_callback_locked(struct drm_syncobj *syncobj, in drm_syncobj_add_callback_locked() argument
90 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, in drm_syncobj_fence_get_or_add_callback() argument
102 *fence = drm_syncobj_fence_get(syncobj); in drm_syncobj_fence_get_or_add_callback()
106 spin_lock(&syncobj->lock); in drm_syncobj_fence_get_or_add_callback()
111 if (syncobj->fence) { in drm_syncobj_fence_get_or_add_callback()
112 *fence = dma_fence_get(rcu_dereference_protected(syncobj->fence, in drm_syncobj_fence_get_or_add_callback()
113 lockdep_is_held(&syncobj->lock))); in drm_syncobj_fence_get_or_add_callback()
117 drm_syncobj_add_callback_locked(syncobj, cb, func); in drm_syncobj_fence_get_or_add_callback()
120 spin_unlock(&syncobj->lock); in drm_syncobj_fence_get_or_add_callback()
133 void drm_syncobj_add_callback(struct drm_syncobj *syncobj, in drm_syncobj_add_callback() argument
137 spin_lock(&syncobj->lock); in drm_syncobj_add_callback()
138 drm_syncobj_add_callback_locked(syncobj, cb, func); in drm_syncobj_add_callback()
139 spin_unlock(&syncobj->lock); in drm_syncobj_add_callback()
148 void drm_syncobj_remove_callback(struct drm_syncobj *syncobj, in drm_syncobj_remove_callback() argument
151 spin_lock(&syncobj->lock); in drm_syncobj_remove_callback()
153 spin_unlock(&syncobj->lock); in drm_syncobj_remove_callback()
164 void drm_syncobj_replace_fence(struct drm_syncobj *syncobj, in drm_syncobj_replace_fence() argument
173 spin_lock(&syncobj->lock); in drm_syncobj_replace_fence()
175 old_fence = rcu_dereference_protected(syncobj->fence, in drm_syncobj_replace_fence()
176 lockdep_is_held(&syncobj->lock)); in drm_syncobj_replace_fence()
177 rcu_assign_pointer(syncobj->fence, fence); in drm_syncobj_replace_fence()
180 list_for_each_entry_safe(cur, tmp, &syncobj->cb_list, node) { in drm_syncobj_replace_fence()
182 cur->func(syncobj, cur); in drm_syncobj_replace_fence()
186 spin_unlock(&syncobj->lock); in drm_syncobj_replace_fence()
215 static int drm_syncobj_assign_null_handle(struct drm_syncobj *syncobj) in drm_syncobj_assign_null_handle() argument
227 drm_syncobj_replace_fence(syncobj, &fence->base); in drm_syncobj_assign_null_handle()
251 struct drm_syncobj *syncobj = drm_syncobj_find(file_private, handle); in drm_syncobj_find_fence() local
254 if (!syncobj) in drm_syncobj_find_fence()
257 *fence = drm_syncobj_fence_get(syncobj); in drm_syncobj_find_fence()
261 drm_syncobj_put(syncobj); in drm_syncobj_find_fence()
274 struct drm_syncobj *syncobj = container_of(kref, in drm_syncobj_free() local
277 drm_syncobj_replace_fence(syncobj, NULL); in drm_syncobj_free()
278 kfree(syncobj); in drm_syncobj_free()
298 struct drm_syncobj *syncobj; in drm_syncobj_create() local
300 syncobj = kzalloc(sizeof(struct drm_syncobj), GFP_KERNEL); in drm_syncobj_create()
301 if (!syncobj) in drm_syncobj_create()
304 kref_init(&syncobj->refcount); in drm_syncobj_create()
305 INIT_LIST_HEAD(&syncobj->cb_list); in drm_syncobj_create()
306 spin_lock_init(&syncobj->lock); in drm_syncobj_create()
309 ret = drm_syncobj_assign_null_handle(syncobj); in drm_syncobj_create()
311 drm_syncobj_put(syncobj); in drm_syncobj_create()
317 drm_syncobj_replace_fence(syncobj, fence); in drm_syncobj_create()
319 *out_syncobj = syncobj; in drm_syncobj_create()
336 struct drm_syncobj *syncobj, u32 *handle) in drm_syncobj_get_handle() argument
341 drm_syncobj_get(syncobj); in drm_syncobj_get_handle()
345 ret = idr_alloc(&file_private->syncobj_idr, syncobj, 1, 0, GFP_NOWAIT); in drm_syncobj_get_handle()
351 drm_syncobj_put(syncobj); in drm_syncobj_get_handle()
364 struct drm_syncobj *syncobj; in drm_syncobj_create_as_handle() local
366 ret = drm_syncobj_create(&syncobj, flags, NULL); in drm_syncobj_create_as_handle()
370 ret = drm_syncobj_get_handle(file_private, syncobj, handle); in drm_syncobj_create_as_handle()
371 drm_syncobj_put(syncobj); in drm_syncobj_create_as_handle()
378 struct drm_syncobj *syncobj; in drm_syncobj_destroy() local
381 syncobj = idr_remove(&file_private->syncobj_idr, handle); in drm_syncobj_destroy()
384 if (!syncobj) in drm_syncobj_destroy()
387 drm_syncobj_put(syncobj); in drm_syncobj_destroy()
393 struct drm_syncobj *syncobj = file->private_data; in drm_syncobj_file_release() local
395 drm_syncobj_put(syncobj); in drm_syncobj_file_release()
412 int drm_syncobj_get_fd(struct drm_syncobj *syncobj, int *p_fd) in drm_syncobj_get_fd() argument
423 syncobj, 0); in drm_syncobj_get_fd()
429 drm_syncobj_get(syncobj); in drm_syncobj_get_fd()
440 struct drm_syncobj *syncobj = drm_syncobj_find(file_private, handle); in drm_syncobj_handle_to_fd() local
443 if (!syncobj) in drm_syncobj_handle_to_fd()
446 ret = drm_syncobj_get_fd(syncobj, p_fd); in drm_syncobj_handle_to_fd()
447 drm_syncobj_put(syncobj); in drm_syncobj_handle_to_fd()
454 struct drm_syncobj *syncobj; in drm_syncobj_fd_to_handle() local
468 syncobj = file->private_data; in drm_syncobj_fd_to_handle()
469 drm_syncobj_get(syncobj); in drm_syncobj_fd_to_handle()
473 ret = idr_alloc(&file_private->syncobj_idr, syncobj, 1, 0, GFP_NOWAIT); in drm_syncobj_fd_to_handle()
481 drm_syncobj_put(syncobj); in drm_syncobj_fd_to_handle()
491 struct drm_syncobj *syncobj; in drm_syncobj_import_sync_file_fence() local
496 syncobj = drm_syncobj_find(file_private, handle); in drm_syncobj_import_sync_file_fence()
497 if (!syncobj) { in drm_syncobj_import_sync_file_fence()
502 drm_syncobj_replace_fence(syncobj, fence); in drm_syncobj_import_sync_file_fence()
504 drm_syncobj_put(syncobj); in drm_syncobj_import_sync_file_fence()
557 struct drm_syncobj *syncobj = ptr; in drm_syncobj_release_handle() local
559 drm_syncobj_put(syncobj); in drm_syncobj_release_handle()
676 static void syncobj_wait_syncobj_func(struct drm_syncobj *syncobj, in syncobj_wait_syncobj_func() argument
683 wait->fence = dma_fence_get(rcu_dereference_protected(syncobj->fence, in syncobj_wait_syncobj_func()
684 lockdep_is_held(&syncobj->lock))); in syncobj_wait_syncobj_func()