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()
165 static struct sync_file *sync_file_merge(const char *name, struct sync_file *a, in sync_file_merge()
166 struct sync_file *b) in sync_file_merge()
168 struct sync_file *sync_file; in sync_file_merge() local
171 sync_file = sync_file_alloc(); in sync_file_merge()
172 if (!sync_file) in sync_file_merge()
177 fput(sync_file->file); in sync_file_merge()
180 sync_file->fence = fence; in sync_file_merge()
181 strscpy(sync_file->user_name, name, sizeof(sync_file->user_name)); in sync_file_merge()
182 return sync_file; in sync_file_merge()
187 struct sync_file *sync_file = file->private_data; in sync_file_release() local
189 if (test_bit(POLL_ENABLED, &sync_file->flags)) in sync_file_release()
190 dma_fence_remove_callback(sync_file->fence, &sync_file->cb); in sync_file_release()
191 dma_fence_put(sync_file->fence); in sync_file_release()
192 kfree(sync_file); in sync_file_release()
199 struct sync_file *sync_file = file->private_data; in sync_file_poll() local
201 poll_wait(file, &sync_file->wq, wait); in sync_file_poll()
203 if (list_empty(&sync_file->cb.node) && in sync_file_poll()
204 !test_and_set_bit(POLL_ENABLED, &sync_file->flags)) { in sync_file_poll()
205 if (dma_fence_add_callback(sync_file->fence, &sync_file->cb, in sync_file_poll()
207 wake_up_all(&sync_file->wq); in sync_file_poll()
210 return dma_fence_is_signaled(sync_file->fence) ? EPOLLIN : 0; in sync_file_poll()
213 static long sync_file_ioctl_merge(struct sync_file *sync_file, in sync_file_ioctl_merge() argument
218 struct sync_file *fence2, *fence3; in sync_file_ioctl_merge()
241 fence3 = sync_file_merge(data.name, sync_file, fence2); in sync_file_ioctl_merge()
295 static long sync_file_ioctl_fence_info(struct sync_file *sync_file, in sync_file_ioctl_fence_info() argument
313 dma_fence_unwrap_for_each(fence, &iter, sync_file->fence) in sync_file_ioctl_fence_info()
323 info.status = dma_fence_get_status(sync_file->fence); in sync_file_ioctl_fence_info()
338 dma_fence_unwrap_for_each(fence, &iter, sync_file->fence) { in sync_file_ioctl_fence_info()
352 sync_file_get_name(sync_file, info.name, sizeof(info.name)); in sync_file_ioctl_fence_info()
366 static int sync_file_ioctl_set_deadline(struct sync_file *sync_file, in sync_file_ioctl_set_deadline() argument
377 dma_fence_set_deadline(sync_file->fence, ns_to_ktime(ts.deadline_ns)); in sync_file_ioctl_set_deadline()
385 struct sync_file *sync_file = file->private_data; in sync_file_ioctl() local
389 return sync_file_ioctl_merge(sync_file, arg); in sync_file_ioctl()
392 return sync_file_ioctl_fence_info(sync_file, arg); in sync_file_ioctl()
395 return sync_file_ioctl_set_deadline(sync_file, arg); in sync_file_ioctl()