Lines Matching refs:syncobj
223 static void syncobj_wait_syncobj_func(struct drm_syncobj *syncobj,
230 struct drm_syncobj *syncobj; member
237 syncobj_eventfd_entry_func(struct drm_syncobj *syncobj,
251 struct drm_syncobj *syncobj; in drm_syncobj_find() local
256 syncobj = xa_load(&file_private->syncobj_xa, handle); in drm_syncobj_find()
257 if (syncobj) in drm_syncobj_find()
258 drm_syncobj_get(syncobj); in drm_syncobj_find()
262 return syncobj; in drm_syncobj_find()
266 static void drm_syncobj_fence_add_wait(struct drm_syncobj *syncobj, in drm_syncobj_fence_add_wait() argument
274 spin_lock(&syncobj->lock); in drm_syncobj_fence_add_wait()
279 fence = dma_fence_get(rcu_dereference_protected(syncobj->fence, 1)); in drm_syncobj_fence_add_wait()
282 list_add_tail(&wait->node, &syncobj->cb_list); in drm_syncobj_fence_add_wait()
288 spin_unlock(&syncobj->lock); in drm_syncobj_fence_add_wait()
291 static void drm_syncobj_remove_wait(struct drm_syncobj *syncobj, in drm_syncobj_remove_wait() argument
297 spin_lock(&syncobj->lock); in drm_syncobj_remove_wait()
299 spin_unlock(&syncobj->lock); in drm_syncobj_remove_wait()
315 drm_syncobj_add_eventfd(struct drm_syncobj *syncobj, in drm_syncobj_add_eventfd() argument
318 spin_lock(&syncobj->lock); in drm_syncobj_add_eventfd()
319 list_add_tail(&entry->node, &syncobj->ev_fd_list); in drm_syncobj_add_eventfd()
320 syncobj_eventfd_entry_func(syncobj, entry); in drm_syncobj_add_eventfd()
321 spin_unlock(&syncobj->lock); in drm_syncobj_add_eventfd()
333 void drm_syncobj_add_point(struct drm_syncobj *syncobj, in drm_syncobj_add_point() argument
344 spin_lock(&syncobj->lock); in drm_syncobj_add_point()
346 prev = drm_syncobj_fence_get(syncobj); in drm_syncobj_add_point()
351 rcu_assign_pointer(syncobj->fence, &chain->base); in drm_syncobj_add_point()
353 list_for_each_entry_safe(wait_cur, wait_tmp, &syncobj->cb_list, node) in drm_syncobj_add_point()
354 syncobj_wait_syncobj_func(syncobj, wait_cur); in drm_syncobj_add_point()
355 list_for_each_entry_safe(ev_fd_cur, ev_fd_tmp, &syncobj->ev_fd_list, node) in drm_syncobj_add_point()
356 syncobj_eventfd_entry_func(syncobj, ev_fd_cur); in drm_syncobj_add_point()
357 spin_unlock(&syncobj->lock); in drm_syncobj_add_point()
372 void drm_syncobj_replace_fence(struct drm_syncobj *syncobj, in drm_syncobj_replace_fence() argument
382 spin_lock(&syncobj->lock); in drm_syncobj_replace_fence()
384 old_fence = rcu_dereference_protected(syncobj->fence, in drm_syncobj_replace_fence()
385 lockdep_is_held(&syncobj->lock)); in drm_syncobj_replace_fence()
386 rcu_assign_pointer(syncobj->fence, fence); in drm_syncobj_replace_fence()
389 list_for_each_entry_safe(wait_cur, wait_tmp, &syncobj->cb_list, node) in drm_syncobj_replace_fence()
390 syncobj_wait_syncobj_func(syncobj, wait_cur); in drm_syncobj_replace_fence()
391 list_for_each_entry_safe(ev_fd_cur, ev_fd_tmp, &syncobj->ev_fd_list, node) in drm_syncobj_replace_fence()
392 syncobj_eventfd_entry_func(syncobj, ev_fd_cur); in drm_syncobj_replace_fence()
395 spin_unlock(&syncobj->lock); in drm_syncobj_replace_fence()
407 static int drm_syncobj_assign_null_handle(struct drm_syncobj *syncobj) in drm_syncobj_assign_null_handle() argument
414 drm_syncobj_replace_fence(syncobj, fence); in drm_syncobj_assign_null_handle()
440 struct drm_syncobj *syncobj = drm_syncobj_find(file_private, handle); in drm_syncobj_find_fence() local
448 if (!syncobj) in drm_syncobj_find_fence()
460 *fence = drm_syncobj_fence_get(syncobj); in drm_syncobj_find_fence()
486 drm_syncobj_fence_add_wait(syncobj, &wait); in drm_syncobj_find_fence()
511 drm_syncobj_remove_wait(syncobj, &wait); in drm_syncobj_find_fence()
514 drm_syncobj_put(syncobj); in drm_syncobj_find_fence()
528 struct drm_syncobj *syncobj = container_of(kref, in drm_syncobj_free() local
533 drm_syncobj_replace_fence(syncobj, NULL); in drm_syncobj_free()
535 list_for_each_entry_safe(ev_fd_cur, ev_fd_tmp, &syncobj->ev_fd_list, node) in drm_syncobj_free()
538 kfree(syncobj); in drm_syncobj_free()
558 struct drm_syncobj *syncobj; in drm_syncobj_create() local
560 syncobj = kzalloc_obj(struct drm_syncobj); in drm_syncobj_create()
561 if (!syncobj) in drm_syncobj_create()
564 kref_init(&syncobj->refcount); in drm_syncobj_create()
565 INIT_LIST_HEAD(&syncobj->cb_list); in drm_syncobj_create()
566 INIT_LIST_HEAD(&syncobj->ev_fd_list); in drm_syncobj_create()
567 spin_lock_init(&syncobj->lock); in drm_syncobj_create()
570 ret = drm_syncobj_assign_null_handle(syncobj); in drm_syncobj_create()
572 drm_syncobj_put(syncobj); in drm_syncobj_create()
578 drm_syncobj_replace_fence(syncobj, fence); in drm_syncobj_create()
580 *out_syncobj = syncobj; in drm_syncobj_create()
597 struct drm_syncobj *syncobj, u32 *handle) in drm_syncobj_get_handle() argument
602 drm_syncobj_get(syncobj); in drm_syncobj_get_handle()
604 ret = xa_alloc(&file_private->syncobj_xa, handle, syncobj, xa_limit_32b, in drm_syncobj_get_handle()
607 drm_syncobj_put(syncobj); in drm_syncobj_get_handle()
617 struct drm_syncobj *syncobj; in drm_syncobj_create_as_handle() local
619 ret = drm_syncobj_create(&syncobj, flags, NULL); in drm_syncobj_create_as_handle()
623 ret = drm_syncobj_get_handle(file_private, syncobj, handle); in drm_syncobj_create_as_handle()
624 drm_syncobj_put(syncobj); in drm_syncobj_create_as_handle()
631 struct drm_syncobj *syncobj; in drm_syncobj_destroy() local
633 syncobj = xa_erase(&file_private->syncobj_xa, handle); in drm_syncobj_destroy()
634 if (!syncobj) in drm_syncobj_destroy()
637 drm_syncobj_put(syncobj); in drm_syncobj_destroy()
643 struct drm_syncobj *syncobj = file->private_data; in drm_syncobj_file_release() local
645 drm_syncobj_put(syncobj); in drm_syncobj_file_release()
662 int drm_syncobj_get_fd(struct drm_syncobj *syncobj, int *p_fd) in drm_syncobj_get_fd() argument
673 syncobj, 0); in drm_syncobj_get_fd()
679 drm_syncobj_get(syncobj); in drm_syncobj_get_fd()
690 struct drm_syncobj *syncobj = drm_syncobj_find(file_private, handle); in drm_syncobj_handle_to_fd() local
693 if (!syncobj) in drm_syncobj_handle_to_fd()
696 ret = drm_syncobj_get_fd(syncobj, p_fd); in drm_syncobj_handle_to_fd()
697 drm_syncobj_put(syncobj); in drm_syncobj_handle_to_fd()
704 struct drm_syncobj *syncobj; in drm_syncobj_fd_to_handle() local
715 syncobj = fd_file(f)->private_data; in drm_syncobj_fd_to_handle()
716 drm_syncobj_get(syncobj); in drm_syncobj_fd_to_handle()
718 ret = xa_alloc(&file_private->syncobj_xa, handle, syncobj, xa_limit_32b, in drm_syncobj_fd_to_handle()
721 drm_syncobj_put(syncobj); in drm_syncobj_fd_to_handle()
730 struct drm_syncobj *syncobj; in drm_syncobj_import_sync_file_fence() local
735 syncobj = drm_syncobj_find(file_private, handle); in drm_syncobj_import_sync_file_fence()
736 if (!syncobj) { in drm_syncobj_import_sync_file_fence()
747 drm_syncobj_add_point(syncobj, chain, fence, point); in drm_syncobj_import_sync_file_fence()
749 drm_syncobj_replace_fence(syncobj, fence); in drm_syncobj_import_sync_file_fence()
753 drm_syncobj_put(syncobj); in drm_syncobj_import_sync_file_fence()
813 struct drm_syncobj *syncobj; in drm_syncobj_release() local
816 xa_for_each(&file_private->syncobj_xa, handle, syncobj) in drm_syncobj_release()
817 drm_syncobj_put(syncobj); in drm_syncobj_release()
1011 static void syncobj_wait_syncobj_func(struct drm_syncobj *syncobj, in syncobj_wait_syncobj_func() argument
1017 fence = rcu_dereference_protected(syncobj->fence, in syncobj_wait_syncobj_func()
1018 lockdep_is_held(&syncobj->lock)); in syncobj_wait_syncobj_func()
1418 syncobj_eventfd_entry_func(struct drm_syncobj *syncobj, in syncobj_eventfd_entry_func() argument
1425 fence = dma_fence_get(rcu_dereference_protected(syncobj->fence, 1)); in syncobj_eventfd_entry_func()
1464 struct drm_syncobj *syncobj; in drm_syncobj_eventfd_ioctl() local
1478 syncobj = drm_syncobj_find(file_private, args->handle); in drm_syncobj_eventfd_ioctl()
1479 if (!syncobj) in drm_syncobj_eventfd_ioctl()
1493 entry->syncobj = syncobj; in drm_syncobj_eventfd_ioctl()
1498 drm_syncobj_add_eventfd(syncobj, entry); in drm_syncobj_eventfd_ioctl()
1499 drm_syncobj_put(syncobj); in drm_syncobj_eventfd_ioctl()
1506 drm_syncobj_put(syncobj); in drm_syncobj_eventfd_ioctl()