Lines Matching refs:submit

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