Lines Matching refs:sync_file

22 static struct sync_file *sync_file_alloc(void)  in sync_file_alloc()
24 struct sync_file *sync_file; in sync_file_alloc() local
26 sync_file = kzalloc(sizeof(*sync_file), GFP_KERNEL); in sync_file_alloc()
27 if (!sync_file) in sync_file_alloc()
30 sync_file->file = anon_inode_getfile("sync_file", &sync_file_fops, in sync_file_alloc()
31 sync_file, 0); in sync_file_alloc()
32 if (IS_ERR(sync_file->file)) in sync_file_alloc()
35 init_waitqueue_head(&sync_file->wq); in sync_file_alloc()
37 INIT_LIST_HEAD(&sync_file->cb.node); in sync_file_alloc()
39 return sync_file; in sync_file_alloc()
42 kfree(sync_file); in sync_file_alloc()
48 struct sync_file *sync_file; in fence_check_cb_func() local
50 sync_file = container_of(cb, struct sync_file, cb); in fence_check_cb_func()
52 wake_up_all(&sync_file->wq); in fence_check_cb_func()
64 struct sync_file *sync_file_create(struct dma_fence *fence) in sync_file_create()
66 struct sync_file *sync_file; in sync_file_create() local
68 sync_file = sync_file_alloc(); in sync_file_create()
69 if (!sync_file) in sync_file_create()
72 sync_file->fence = dma_fence_get(fence); in sync_file_create()
74 return sync_file; in sync_file_create()
78 static struct sync_file *sync_file_fdget(int fd) in sync_file_fdget()
104 struct sync_file *sync_file; in sync_file_get_fence() local
107 sync_file = sync_file_fdget(fd); in sync_file_get_fence()
108 if (!sync_file) in sync_file_get_fence()
111 fence = dma_fence_get(sync_file->fence); in sync_file_get_fence()
112 fput(sync_file->file); in sync_file_get_fence()
131 char *sync_file_get_name(struct sync_file *sync_file, char *buf, int len) in sync_file_get_name() argument
133 if (sync_file->user_name[0]) { in sync_file_get_name()
134 strlcpy(buf, sync_file->user_name, len); in sync_file_get_name()
136 struct dma_fence *fence = sync_file->fence; in sync_file_get_name()
148 static int sync_file_set_fence(struct sync_file *sync_file, in sync_file_set_fence() argument
160 sync_file->fence = fences[0]; in sync_file_set_fence()
169 sync_file->fence = &array->base; in sync_file_set_fence()
175 static struct dma_fence **get_fences(struct sync_file *sync_file, in get_fences() argument
178 if (dma_fence_is_array(sync_file->fence)) { in get_fences()
179 struct dma_fence_array *array = to_dma_fence_array(sync_file->fence); in get_fences()
186 return &sync_file->fence; in get_fences()
210 static struct sync_file *sync_file_merge(const char *name, struct sync_file *a, in sync_file_merge()
211 struct sync_file *b) in sync_file_merge()
213 struct sync_file *sync_file; in sync_file_merge() local
217 sync_file = sync_file_alloc(); in sync_file_merge()
218 if (!sync_file) in sync_file_merge()
280 if (sync_file_set_fence(sync_file, fences, i) < 0) in sync_file_merge()
283 strlcpy(sync_file->user_name, name, sizeof(sync_file->user_name)); in sync_file_merge()
284 return sync_file; in sync_file_merge()
290 fput(sync_file->file); in sync_file_merge()
297 struct sync_file *sync_file = file->private_data; in sync_file_release() local
299 if (test_bit(POLL_ENABLED, &sync_file->flags)) in sync_file_release()
300 dma_fence_remove_callback(sync_file->fence, &sync_file->cb); in sync_file_release()
301 dma_fence_put(sync_file->fence); in sync_file_release()
302 kfree(sync_file); in sync_file_release()
309 struct sync_file *sync_file = file->private_data; in sync_file_poll() local
311 poll_wait(file, &sync_file->wq, wait); in sync_file_poll()
313 if (list_empty(&sync_file->cb.node) && in sync_file_poll()
314 !test_and_set_bit(POLL_ENABLED, &sync_file->flags)) { in sync_file_poll()
315 if (dma_fence_add_callback(sync_file->fence, &sync_file->cb, in sync_file_poll()
317 wake_up_all(&sync_file->wq); in sync_file_poll()
320 return dma_fence_is_signaled(sync_file->fence) ? EPOLLIN : 0; in sync_file_poll()
323 static long sync_file_ioctl_merge(struct sync_file *sync_file, in sync_file_ioctl_merge() argument
328 struct sync_file *fence2, *fence3; in sync_file_ioctl_merge()
351 fence3 = sync_file_merge(data.name, sync_file, fence2); in sync_file_ioctl_merge()
398 static long sync_file_ioctl_fence_info(struct sync_file *sync_file, in sync_file_ioctl_fence_info() argument
413 fences = get_fences(sync_file, &num_fences); in sync_file_ioctl_fence_info()
422 info.status = dma_fence_get_status(sync_file->fence); in sync_file_ioctl_fence_info()
448 sync_file_get_name(sync_file, info.name, sizeof(info.name)); in sync_file_ioctl_fence_info()
465 struct sync_file *sync_file = file->private_data; in sync_file_ioctl() local
469 return sync_file_ioctl_merge(sync_file, arg); in sync_file_ioctl()
472 return sync_file_ioctl_fence_info(sync_file, arg); in sync_file_ioctl()