Lines Matching refs:sync_file

23 static struct sync_file *sync_file_alloc(void)  in sync_file_alloc()
25 struct sync_file *sync_file; in sync_file_alloc() local
27 sync_file = kzalloc(sizeof(*sync_file), GFP_KERNEL); in sync_file_alloc()
28 if (!sync_file) in sync_file_alloc()
31 sync_file->file = anon_inode_getfile("sync_file", &sync_file_fops, in sync_file_alloc()
32 sync_file, 0); in sync_file_alloc()
33 if (IS_ERR(sync_file->file)) in sync_file_alloc()
36 init_waitqueue_head(&sync_file->wq); in sync_file_alloc()
38 INIT_LIST_HEAD(&sync_file->cb.node); in sync_file_alloc()
40 return sync_file; in sync_file_alloc()
43 kfree(sync_file); in sync_file_alloc()
49 struct sync_file *sync_file; in fence_check_cb_func() local
51 sync_file = container_of(cb, struct sync_file, cb); in fence_check_cb_func()
53 wake_up_all(&sync_file->wq); in fence_check_cb_func()
65 struct sync_file *sync_file_create(struct dma_fence *fence) in sync_file_create()
67 struct sync_file *sync_file; in sync_file_create() local
69 sync_file = sync_file_alloc(); in sync_file_create()
70 if (!sync_file) in sync_file_create()
73 sync_file->fence = dma_fence_get(fence); in sync_file_create()
75 return sync_file; in sync_file_create()
79 static struct sync_file *sync_file_fdget(int fd) in sync_file_fdget()
105 struct sync_file *sync_file; in sync_file_get_fence() local
108 sync_file = sync_file_fdget(fd); in sync_file_get_fence()
109 if (!sync_file) in sync_file_get_fence()
112 fence = dma_fence_get(sync_file->fence); in sync_file_get_fence()
113 fput(sync_file->file); in sync_file_get_fence()
132 char *sync_file_get_name(struct sync_file *sync_file, char *buf, int len) in sync_file_get_name() argument
134 if (sync_file->user_name[0]) { in sync_file_get_name()
135 strscpy(buf, sync_file->user_name, len); in sync_file_get_name()
137 struct dma_fence *fence = sync_file->fence; in sync_file_get_name()
159 static struct sync_file *sync_file_merge(const char *name, struct sync_file *a, in sync_file_merge()
160 struct sync_file *b) in sync_file_merge()
162 struct sync_file *sync_file; in sync_file_merge() local
165 sync_file = sync_file_alloc(); in sync_file_merge()
166 if (!sync_file) in sync_file_merge()
171 fput(sync_file->file); in sync_file_merge()
174 sync_file->fence = fence; in sync_file_merge()
175 strscpy(sync_file->user_name, name, sizeof(sync_file->user_name)); in sync_file_merge()
176 return sync_file; in sync_file_merge()
181 struct sync_file *sync_file = file->private_data; in sync_file_release() local
183 if (test_bit(POLL_ENABLED, &sync_file->flags)) in sync_file_release()
184 dma_fence_remove_callback(sync_file->fence, &sync_file->cb); in sync_file_release()
185 dma_fence_put(sync_file->fence); in sync_file_release()
186 kfree(sync_file); in sync_file_release()
193 struct sync_file *sync_file = file->private_data; in sync_file_poll() local
195 poll_wait(file, &sync_file->wq, wait); in sync_file_poll()
197 if (list_empty(&sync_file->cb.node) && in sync_file_poll()
198 !test_and_set_bit(POLL_ENABLED, &sync_file->flags)) { in sync_file_poll()
199 if (dma_fence_add_callback(sync_file->fence, &sync_file->cb, in sync_file_poll()
201 wake_up_all(&sync_file->wq); in sync_file_poll()
204 return dma_fence_is_signaled(sync_file->fence) ? EPOLLIN : 0; in sync_file_poll()
207 static long sync_file_ioctl_merge(struct sync_file *sync_file, in sync_file_ioctl_merge() argument
212 struct sync_file *fence2, *fence3; in sync_file_ioctl_merge()
235 fence3 = sync_file_merge(data.name, sync_file, fence2); in sync_file_ioctl_merge()
282 static long sync_file_ioctl_fence_info(struct sync_file *sync_file, in sync_file_ioctl_fence_info() argument
300 dma_fence_unwrap_for_each(fence, &iter, sync_file->fence) in sync_file_ioctl_fence_info()
310 info.status = dma_fence_get_status(sync_file->fence); in sync_file_ioctl_fence_info()
325 dma_fence_unwrap_for_each(fence, &iter, sync_file->fence) { in sync_file_ioctl_fence_info()
339 sync_file_get_name(sync_file, info.name, sizeof(info.name)); in sync_file_ioctl_fence_info()
356 struct sync_file *sync_file = file->private_data; in sync_file_ioctl() local
360 return sync_file_ioctl_merge(sync_file, arg); in sync_file_ioctl()
363 return sync_file_ioctl_fence_info(sync_file, arg); in sync_file_ioctl()