Lines Matching refs:syncobj

172 static void syncobj_wait_syncobj_func(struct drm_syncobj *syncobj,
186 struct drm_syncobj *syncobj; in drm_syncobj_find() local
191 syncobj = idr_find(&file_private->syncobj_idr, handle); in drm_syncobj_find()
192 if (syncobj) in drm_syncobj_find()
193 drm_syncobj_get(syncobj); in drm_syncobj_find()
197 return syncobj; in drm_syncobj_find()
201 static void drm_syncobj_fence_add_wait(struct drm_syncobj *syncobj, in drm_syncobj_fence_add_wait() argument
209 spin_lock(&syncobj->lock); in drm_syncobj_fence_add_wait()
214 fence = dma_fence_get(rcu_dereference_protected(syncobj->fence, 1)); in drm_syncobj_fence_add_wait()
217 list_add_tail(&wait->node, &syncobj->cb_list); in drm_syncobj_fence_add_wait()
223 spin_unlock(&syncobj->lock); in drm_syncobj_fence_add_wait()
226 static void drm_syncobj_remove_wait(struct drm_syncobj *syncobj, in drm_syncobj_remove_wait() argument
232 spin_lock(&syncobj->lock); in drm_syncobj_remove_wait()
234 spin_unlock(&syncobj->lock); in drm_syncobj_remove_wait()
246 void drm_syncobj_add_point(struct drm_syncobj *syncobj, in drm_syncobj_add_point() argument
256 spin_lock(&syncobj->lock); in drm_syncobj_add_point()
258 prev = drm_syncobj_fence_get(syncobj); in drm_syncobj_add_point()
263 rcu_assign_pointer(syncobj->fence, &chain->base); in drm_syncobj_add_point()
265 list_for_each_entry_safe(cur, tmp, &syncobj->cb_list, node) in drm_syncobj_add_point()
266 syncobj_wait_syncobj_func(syncobj, cur); in drm_syncobj_add_point()
267 spin_unlock(&syncobj->lock); in drm_syncobj_add_point()
282 void drm_syncobj_replace_fence(struct drm_syncobj *syncobj, in drm_syncobj_replace_fence() argument
291 spin_lock(&syncobj->lock); in drm_syncobj_replace_fence()
293 old_fence = rcu_dereference_protected(syncobj->fence, in drm_syncobj_replace_fence()
294 lockdep_is_held(&syncobj->lock)); in drm_syncobj_replace_fence()
295 rcu_assign_pointer(syncobj->fence, fence); in drm_syncobj_replace_fence()
298 list_for_each_entry_safe(cur, tmp, &syncobj->cb_list, node) in drm_syncobj_replace_fence()
299 syncobj_wait_syncobj_func(syncobj, cur); in drm_syncobj_replace_fence()
302 spin_unlock(&syncobj->lock); in drm_syncobj_replace_fence()
314 static void drm_syncobj_assign_null_handle(struct drm_syncobj *syncobj) in drm_syncobj_assign_null_handle() argument
318 drm_syncobj_replace_fence(syncobj, fence); in drm_syncobj_assign_null_handle()
343 struct drm_syncobj *syncobj = drm_syncobj_find(file_private, handle); in drm_syncobj_find_fence() local
348 if (!syncobj) in drm_syncobj_find_fence()
351 *fence = drm_syncobj_fence_get(syncobj); in drm_syncobj_find_fence()
352 drm_syncobj_put(syncobj); in drm_syncobj_find_fence()
377 drm_syncobj_fence_add_wait(syncobj, &wait); in drm_syncobj_find_fence()
380 spin_lock(&syncobj->lock); in drm_syncobj_find_fence()
390 spin_unlock(&syncobj->lock); in drm_syncobj_find_fence()
397 spin_lock(&syncobj->lock); in drm_syncobj_find_fence()
414 spin_unlock(&syncobj->lock); in drm_syncobj_find_fence()
441 drm_syncobj_remove_wait(syncobj, &wait); in drm_syncobj_find_fence()
456 struct drm_syncobj *syncobj = container_of(kref, in drm_syncobj_free() local
459 drm_syncobj_replace_fence(syncobj, NULL); in drm_syncobj_free()
460 spin_lock_destroy(&syncobj->lock); in drm_syncobj_free()
461 kfree(syncobj); in drm_syncobj_free()
480 struct drm_syncobj *syncobj; in drm_syncobj_create() local
482 syncobj = kzalloc(sizeof(struct drm_syncobj), GFP_KERNEL); in drm_syncobj_create()
483 if (!syncobj) in drm_syncobj_create()
486 kref_init(&syncobj->refcount); in drm_syncobj_create()
487 INIT_LIST_HEAD(&syncobj->cb_list); in drm_syncobj_create()
488 spin_lock_init(&syncobj->lock); in drm_syncobj_create()
491 drm_syncobj_assign_null_handle(syncobj); in drm_syncobj_create()
494 drm_syncobj_replace_fence(syncobj, fence); in drm_syncobj_create()
496 *out_syncobj = syncobj; in drm_syncobj_create()
513 struct drm_syncobj *syncobj, u32 *handle) in drm_syncobj_get_handle() argument
518 drm_syncobj_get(syncobj); in drm_syncobj_get_handle()
522 ret = idr_alloc(&file_private->syncobj_idr, syncobj, 1, 0, GFP_NOWAIT); in drm_syncobj_get_handle()
528 drm_syncobj_put(syncobj); in drm_syncobj_get_handle()
541 struct drm_syncobj *syncobj; in drm_syncobj_create_as_handle() local
543 ret = drm_syncobj_create(&syncobj, flags, NULL); in drm_syncobj_create_as_handle()
547 ret = drm_syncobj_get_handle(file_private, syncobj, handle); in drm_syncobj_create_as_handle()
548 drm_syncobj_put(syncobj); in drm_syncobj_create_as_handle()
555 struct drm_syncobj *syncobj; in drm_syncobj_destroy() local
558 syncobj = idr_remove(&file_private->syncobj_idr, handle); in drm_syncobj_destroy()
561 if (!syncobj) in drm_syncobj_destroy()
564 drm_syncobj_put(syncobj); in drm_syncobj_destroy()
575 struct drm_syncobj *syncobj = file->f_data; in drm_syncobj_fop_close() local
577 struct drm_syncobj *syncobj = file->private_data; in drm_syncobj_fop_close()
580 drm_syncobj_put(syncobj); in drm_syncobj_fop_close()
612 int drm_syncobj_get_fd(struct drm_syncobj *syncobj, int *p_fd) in drm_syncobj_get_fd() argument
626 file->f_data = syncobj; in drm_syncobj_get_fd()
635 syncobj, 0); in drm_syncobj_get_fd()
642 drm_syncobj_get(syncobj); in drm_syncobj_get_fd()
653 struct drm_syncobj *syncobj = drm_syncobj_find(file_private, handle); in drm_syncobj_handle_to_fd() local
656 if (!syncobj) in drm_syncobj_handle_to_fd()
659 ret = drm_syncobj_get_fd(syncobj, p_fd); in drm_syncobj_handle_to_fd()
660 drm_syncobj_put(syncobj); in drm_syncobj_handle_to_fd()
667 struct drm_syncobj *syncobj; in drm_syncobj_fd_to_handle() local
686 syncobj = f.file->f_data; in drm_syncobj_fd_to_handle()
688 syncobj = f.file->private_data; in drm_syncobj_fd_to_handle()
690 drm_syncobj_get(syncobj); in drm_syncobj_fd_to_handle()
694 ret = idr_alloc(&file_private->syncobj_idr, syncobj, 1, 0, GFP_NOWAIT); in drm_syncobj_fd_to_handle()
702 drm_syncobj_put(syncobj); in drm_syncobj_fd_to_handle()
712 struct drm_syncobj *syncobj; in drm_syncobj_import_sync_file_fence() local
717 syncobj = drm_syncobj_find(file_private, handle); in drm_syncobj_import_sync_file_fence()
718 if (!syncobj) { in drm_syncobj_import_sync_file_fence()
723 drm_syncobj_replace_fence(syncobj, fence); in drm_syncobj_import_sync_file_fence()
725 drm_syncobj_put(syncobj); in drm_syncobj_import_sync_file_fence()
823 struct drm_syncobj *syncobj = ptr; in drm_syncobj_release_handle() local
825 drm_syncobj_put(syncobj); in drm_syncobj_release_handle()
1017 static void syncobj_wait_syncobj_func(struct drm_syncobj *syncobj, in syncobj_wait_syncobj_func() argument
1023 fence = rcu_dereference_protected(syncobj->fence, in syncobj_wait_syncobj_func()
1024 lockdep_is_held(&syncobj->lock)); in syncobj_wait_syncobj_func()
1038 KASSERT(spin_is_locked(&syncobj->lock)); in syncobj_wait_syncobj_func()