Messages in this thread | | | From | Dmitry Osipenko <> | Subject | [PATCH v5 0/3] Add sync object UAPI support to VirtIO-GPU driver | Date | Sun, 9 Apr 2023 15:39:54 +0300 |
| |
We have multiple Vulkan context types that are awaiting for the addition of the sync object DRM UAPI support to the VirtIO-GPU kernel driver:
1. Venus context 2. Native contexts (virtio-freedreno, virtio-intel, virtio-amdgpu)
Mesa core supports DRM sync object UAPI, providing Vulkan drivers with a generic fencing implementation that we want to utilize.
This patch adds initial sync objects support. It creates fundament for a further fencing improvements. Later on we will want to extend the VirtIO-GPU fencing API with passing fence IDs to host for waiting, it will be a new additional VirtIO-GPU IOCTL and more. Today we have several VirtIO-GPU context drivers in works that require VirtIO-GPU to support sync objects UAPI.
The patch is heavily inspired by the sync object UAPI implementation of the MSM driver.
Changelog:
v5: - Factored out dma-fence unwrap API usage into separate patch as was suggested by Emil Velikov.
- Improved and documented the job submission reorderings as was requested by Emil Velikov. Sync file FD is now installed after job is submitted to virtio to further optimize reorderings.
- Added comment for the kvalloc, as was requested by Emil Velikov.
- The num_in/out_syncobjs now is set only after completed parsing of pre/post deps, as was requested by Emil Velikov.
v4: - Added r-b from Rob Clark to the "refactoring" patch.
- Replaced for/while(ptr && itr) with if (ptr), like was suggested by Rob Clark.
- Dropped NOWARN and NORETRY GFP flags and switched syncobj patch to use kvmalloc.
- Removed unused variables from syncobj patch that were borrowed by accident from another (upcoming) patch after one of git rebases.
v3: - Switched to use dma_fence_unwrap_for_each(), like was suggested by Rob Clark.
- Fixed missing dma_fence_put() in error code path that was spotted by Rob Clark.
- Removed obsoleted comment to virtio_gpu_execbuffer_ioctl(), like was suggested by Rob Clark.
v2: - Fixed chain-fence context matching by making use of dma_fence_chain_contained().
- Fixed potential uninitialized var usage in error code patch of parse_post_deps(). MSM driver had a similar issue that is fixed already in upstream.
- Added new patch that refactors job submission code path. I found that it was very difficult to add a new/upcoming host-waits feature because of how variables are passed around the code, the virtgpu_ioctl.c also was growing to unmanageable size.
Dmitry Osipenko (3): drm/virtio: Refactor and optimize job submission code path drm/virtio: Wait for each dma-fence of in-fence array individually drm/virtio: Support sync objects
drivers/gpu/drm/virtio/Makefile | 2 +- drivers/gpu/drm/virtio/virtgpu_drv.c | 3 +- drivers/gpu/drm/virtio/virtgpu_drv.h | 4 + drivers/gpu/drm/virtio/virtgpu_ioctl.c | 182 -------- drivers/gpu/drm/virtio/virtgpu_submit.c | 525 ++++++++++++++++++++++++ include/uapi/drm/virtgpu_drm.h | 16 +- 6 files changed, 547 insertions(+), 185 deletions(-) create mode 100644 drivers/gpu/drm/virtio/virtgpu_submit.c
-- 2.39.2
| |