Lines Matching refs:sync_file
31 static struct sync_file *sync_file_alloc(void) in sync_file_alloc()
33 struct sync_file *sync_file; in sync_file_alloc() local
35 sync_file = kzalloc(sizeof(*sync_file), GFP_KERNEL); in sync_file_alloc()
36 if (!sync_file) in sync_file_alloc()
39 sync_file->file = anon_inode_getfile("sync_file", &sync_file_fops, in sync_file_alloc()
40 sync_file, 0); in sync_file_alloc()
41 if (IS_ERR(sync_file->file)) in sync_file_alloc()
44 init_waitqueue_head(&sync_file->wq); in sync_file_alloc()
46 INIT_LIST_HEAD(&sync_file->cb.node); in sync_file_alloc()
48 return sync_file; in sync_file_alloc()
51 kfree(sync_file); in sync_file_alloc()
57 struct sync_file *sync_file; in fence_check_cb_func() local
59 sync_file = container_of(cb, struct sync_file, cb); in fence_check_cb_func()
61 wake_up_all(&sync_file->wq); in fence_check_cb_func()
73 struct sync_file *sync_file_create(struct dma_fence *fence) in sync_file_create()
75 struct sync_file *sync_file; in sync_file_create() local
77 sync_file = sync_file_alloc(); in sync_file_create()
78 if (!sync_file) in sync_file_create()
81 sync_file->fence = dma_fence_get(fence); in sync_file_create()
83 return sync_file; in sync_file_create()
87 static struct sync_file *sync_file_fdget(int fd) in sync_file_fdget()
113 struct sync_file *sync_file; in sync_file_get_fence() local
116 sync_file = sync_file_fdget(fd); in sync_file_get_fence()
117 if (!sync_file) in sync_file_get_fence()
120 fence = dma_fence_get(sync_file->fence); in sync_file_get_fence()
121 fput(sync_file->file); in sync_file_get_fence()
140 char *sync_file_get_name(struct sync_file *sync_file, char *buf, int len) in sync_file_get_name() argument
142 if (sync_file->user_name[0]) { in sync_file_get_name()
143 strlcpy(buf, sync_file->user_name, len); in sync_file_get_name()
145 struct dma_fence *fence = sync_file->fence; in sync_file_get_name()
157 static int sync_file_set_fence(struct sync_file *sync_file, in sync_file_set_fence() argument
169 sync_file->fence = fences[0]; in sync_file_set_fence()
178 sync_file->fence = &array->base; in sync_file_set_fence()
184 static struct dma_fence **get_fences(struct sync_file *sync_file, in get_fences() argument
187 if (dma_fence_is_array(sync_file->fence)) { in get_fences()
188 struct dma_fence_array *array = to_dma_fence_array(sync_file->fence); in get_fences()
195 return &sync_file->fence; in get_fences()
219 static struct sync_file *sync_file_merge(const char *name, struct sync_file *a, in sync_file_merge()
220 struct sync_file *b) in sync_file_merge()
222 struct sync_file *sync_file; in sync_file_merge() local
226 sync_file = sync_file_alloc(); in sync_file_merge()
227 if (!sync_file) in sync_file_merge()
289 if (sync_file_set_fence(sync_file, fences, i) < 0) { in sync_file_merge()
294 strlcpy(sync_file->user_name, name, sizeof(sync_file->user_name)); in sync_file_merge()
295 return sync_file; in sync_file_merge()
298 fput(sync_file->file); in sync_file_merge()
305 struct sync_file *sync_file = file->private_data; in sync_file_release() local
307 if (test_bit(POLL_ENABLED, &sync_file->flags)) in sync_file_release()
308 dma_fence_remove_callback(sync_file->fence, &sync_file->cb); in sync_file_release()
309 dma_fence_put(sync_file->fence); in sync_file_release()
310 kfree(sync_file); in sync_file_release()
317 struct sync_file *sync_file = file->private_data; in sync_file_poll() local
319 poll_wait(file, &sync_file->wq, wait); in sync_file_poll()
321 if (list_empty(&sync_file->cb.node) && in sync_file_poll()
322 !test_and_set_bit(POLL_ENABLED, &sync_file->flags)) { in sync_file_poll()
323 if (dma_fence_add_callback(sync_file->fence, &sync_file->cb, in sync_file_poll()
325 wake_up_all(&sync_file->wq); in sync_file_poll()
328 return dma_fence_is_signaled(sync_file->fence) ? EPOLLIN : 0; in sync_file_poll()
331 static long sync_file_ioctl_merge(struct sync_file *sync_file, in sync_file_ioctl_merge() argument
336 struct sync_file *fence2, *fence3; in sync_file_ioctl_merge()
359 fence3 = sync_file_merge(data.name, sync_file, fence2); in sync_file_ioctl_merge()
406 static long sync_file_ioctl_fence_info(struct sync_file *sync_file, in sync_file_ioctl_fence_info() argument
421 fences = get_fences(sync_file, &num_fences); in sync_file_ioctl_fence_info()
430 info.status = dma_fence_is_signaled(sync_file->fence); in sync_file_ioctl_fence_info()
456 sync_file_get_name(sync_file, info.name, sizeof(info.name)); in sync_file_ioctl_fence_info()
473 struct sync_file *sync_file = file->private_data; in sync_file_ioctl() local
477 return sync_file_ioctl_merge(sync_file, arg); in sync_file_ioctl()
480 return sync_file_ioctl_fence_info(sync_file, arg); in sync_file_ioctl()