Lines Matching refs:submit

48 static int virtio_gpu_do_fence_wait(struct virtio_gpu_submit *submit,  in virtio_gpu_do_fence_wait()  argument
51 u32 context = submit->fence_ctx + submit->ring_idx; in virtio_gpu_do_fence_wait()
59 static int virtio_gpu_dma_fence_wait(struct virtio_gpu_submit *submit, in virtio_gpu_dma_fence_wait() argument
67 err = virtio_gpu_do_fence_wait(submit, f); in virtio_gpu_dma_fence_wait()
89 virtio_gpu_parse_deps(struct virtio_gpu_submit *submit) in virtio_gpu_parse_deps() argument
91 struct drm_virtgpu_execbuffer *exbuf = submit->exbuf; in virtio_gpu_parse_deps()
129 ret = drm_syncobj_find_fence(submit->file, syncobj_desc.handle, in virtio_gpu_parse_deps()
134 ret = virtio_gpu_dma_fence_wait(submit, fence); in virtio_gpu_parse_deps()
141 syncobjs[i] = drm_syncobj_find(submit->file, in virtio_gpu_parse_deps()
155 submit->num_in_syncobjs = num_in_syncobjs; in virtio_gpu_parse_deps()
156 submit->in_syncobjs = syncobjs; in virtio_gpu_parse_deps()
186 static int virtio_gpu_parse_post_deps(struct virtio_gpu_submit *submit) in virtio_gpu_parse_post_deps() argument
188 struct drm_virtgpu_execbuffer *exbuf = submit->exbuf; in virtio_gpu_parse_post_deps()
229 post_deps[i].syncobj = drm_syncobj_find(submit->file, in virtio_gpu_parse_post_deps()
243 submit->num_out_syncobjs = num_out_syncobjs; in virtio_gpu_parse_post_deps()
244 submit->post_deps = post_deps; in virtio_gpu_parse_post_deps()
250 virtio_gpu_process_post_deps(struct virtio_gpu_submit *submit) in virtio_gpu_process_post_deps() argument
252 struct virtio_gpu_submit_post_dep *post_deps = submit->post_deps; in virtio_gpu_process_post_deps()
255 struct dma_fence *fence = &submit->out_fence->f; in virtio_gpu_process_post_deps()
258 for (i = 0; i < submit->num_out_syncobjs; i++) { in virtio_gpu_process_post_deps()
298 static int virtio_gpu_init_submit_buflist(struct virtio_gpu_submit *submit) in virtio_gpu_init_submit_buflist() argument
300 struct drm_virtgpu_execbuffer *exbuf = submit->exbuf; in virtio_gpu_init_submit_buflist()
317 submit->buflist = virtio_gpu_array_from_handles(submit->file, bo_handles, in virtio_gpu_init_submit_buflist()
319 if (!submit->buflist) { in virtio_gpu_init_submit_buflist()
329 static void virtio_gpu_cleanup_submit(struct virtio_gpu_submit *submit) in virtio_gpu_cleanup_submit() argument
331 virtio_gpu_reset_syncobjs(submit->in_syncobjs, submit->num_in_syncobjs); in virtio_gpu_cleanup_submit()
332 virtio_gpu_free_syncobjs(submit->in_syncobjs, submit->num_in_syncobjs); in virtio_gpu_cleanup_submit()
333 virtio_gpu_free_post_deps(submit->post_deps, submit->num_out_syncobjs); in virtio_gpu_cleanup_submit()
335 if (!IS_ERR(submit->buf)) in virtio_gpu_cleanup_submit()
336 kvfree(submit->buf); in virtio_gpu_cleanup_submit()
338 if (submit->buflist) in virtio_gpu_cleanup_submit()
339 virtio_gpu_array_put_free(submit->buflist); in virtio_gpu_cleanup_submit()
341 if (submit->out_fence_fd >= 0) in virtio_gpu_cleanup_submit()
342 put_unused_fd(submit->out_fence_fd); in virtio_gpu_cleanup_submit()
344 if (submit->out_fence) in virtio_gpu_cleanup_submit()
345 dma_fence_put(&submit->out_fence->f); in virtio_gpu_cleanup_submit()
347 if (submit->sync_file) in virtio_gpu_cleanup_submit()
348 fput(submit->sync_file->file); in virtio_gpu_cleanup_submit()
351 static void virtio_gpu_submit(struct virtio_gpu_submit *submit) in virtio_gpu_submit() argument
353 virtio_gpu_cmd_submit(submit->vgdev, submit->buf, submit->exbuf->size, in virtio_gpu_submit()
354 submit->vfpriv->ctx_id, submit->buflist, in virtio_gpu_submit()
355 submit->out_fence); in virtio_gpu_submit()
356 virtio_gpu_notify(submit->vgdev); in virtio_gpu_submit()
359 static void virtio_gpu_complete_submit(struct virtio_gpu_submit *submit) in virtio_gpu_complete_submit() argument
361 submit->buf = NULL; in virtio_gpu_complete_submit()
362 submit->buflist = NULL; in virtio_gpu_complete_submit()
363 submit->sync_file = NULL; in virtio_gpu_complete_submit()
364 submit->out_fence_fd = -1; in virtio_gpu_complete_submit()
367 static int virtio_gpu_init_submit(struct virtio_gpu_submit *submit, in virtio_gpu_init_submit() argument
379 memset(submit, 0, sizeof(*submit)); in virtio_gpu_init_submit()
403 submit->out_fence = out_fence; in virtio_gpu_init_submit()
404 submit->fence_ctx = fence_ctx; in virtio_gpu_init_submit()
405 submit->ring_idx = ring_idx; in virtio_gpu_init_submit()
406 submit->out_fence_fd = -1; in virtio_gpu_init_submit()
407 submit->vfpriv = vfpriv; in virtio_gpu_init_submit()
408 submit->vgdev = vgdev; in virtio_gpu_init_submit()
409 submit->exbuf = exbuf; in virtio_gpu_init_submit()
410 submit->file = file; in virtio_gpu_init_submit()
412 err = virtio_gpu_init_submit_buflist(submit); in virtio_gpu_init_submit()
416 submit->buf = vmemdup_user(u64_to_user_ptr(exbuf->command), exbuf->size); in virtio_gpu_init_submit()
417 if (IS_ERR(submit->buf)) in virtio_gpu_init_submit()
418 return PTR_ERR(submit->buf); in virtio_gpu_init_submit()
425 submit->out_fence_fd = err; in virtio_gpu_init_submit()
427 submit->sync_file = sync_file_create(&out_fence->f); in virtio_gpu_init_submit()
428 if (!submit->sync_file) in virtio_gpu_init_submit()
435 static int virtio_gpu_wait_in_fence(struct virtio_gpu_submit *submit) in virtio_gpu_wait_in_fence() argument
439 if (submit->exbuf->flags & VIRTGPU_EXECBUF_FENCE_FD_IN) { in virtio_gpu_wait_in_fence()
441 sync_file_get_fence(submit->exbuf->fence_fd); in virtio_gpu_wait_in_fence()
449 ret = virtio_gpu_dma_fence_wait(submit, in_fence); in virtio_gpu_wait_in_fence()
457 static void virtio_gpu_install_out_fence_fd(struct virtio_gpu_submit *submit) in virtio_gpu_install_out_fence_fd() argument
459 if (submit->sync_file) { in virtio_gpu_install_out_fence_fd()
460 submit->exbuf->fence_fd = submit->out_fence_fd; in virtio_gpu_install_out_fence_fd()
461 fd_install(submit->out_fence_fd, submit->sync_file->file); in virtio_gpu_install_out_fence_fd()
465 static int virtio_gpu_lock_buflist(struct virtio_gpu_submit *submit) in virtio_gpu_lock_buflist() argument
467 if (submit->buflist) in virtio_gpu_lock_buflist()
468 return virtio_gpu_array_lock_resv(submit->buflist); in virtio_gpu_lock_buflist()
480 struct virtio_gpu_submit submit; in virtio_gpu_execbuffer_ioctl() local
503 ret = virtio_gpu_init_submit(&submit, exbuf, dev, file, in virtio_gpu_execbuffer_ioctl()
508 ret = virtio_gpu_parse_post_deps(&submit); in virtio_gpu_execbuffer_ioctl()
512 ret = virtio_gpu_parse_deps(&submit); in virtio_gpu_execbuffer_ioctl()
521 ret = virtio_gpu_wait_in_fence(&submit); in virtio_gpu_execbuffer_ioctl()
525 ret = virtio_gpu_lock_buflist(&submit); in virtio_gpu_execbuffer_ioctl()
529 virtio_gpu_submit(&submit); in virtio_gpu_execbuffer_ioctl()
535 virtio_gpu_install_out_fence_fd(&submit); in virtio_gpu_execbuffer_ioctl()
536 virtio_gpu_process_post_deps(&submit); in virtio_gpu_execbuffer_ioctl()
537 virtio_gpu_complete_submit(&submit); in virtio_gpu_execbuffer_ioctl()
539 virtio_gpu_cleanup_submit(&submit); in virtio_gpu_execbuffer_ioctl()