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 | 530 ++++++++++++++++++++++++ include/uapi/drm/virtgpu_drm.h | 16 +- 6 files changed, 552 insertions(+), 185 deletions(-) create mode 100644 drivers/gpu/drm/virtio/virtgpu_submit.c
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: v6: - Added zeroing out of syncobj_desc, as was suggested by Emil Velikov. - Fixed memleak in error code path which was spotted by Emil Velikov. - Switched to u32/u64 instead of uint_t. Previously was keeping uint_t style of the virtgpu_ioctl.c, in the end decided to change it because it's not a proper kernel coding style after all. - Kept single drm_virtgpu_execbuffer_syncobj struct for both in/out sync objects. There was a little concern about whether it would be worthwhile to have separate in/out descriptors, in practice it's unlikely that we will extend the descs in a foreseeable future. There is no overhead in using same struct since we want to pad it to 64b anyways and it shouldn't be a problem to separate the descs later on if we will want to do that. - Added r-b from Emil Velikov. 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 | 530 ++++++++++++++++++++++++ include/uapi/drm/virtgpu_drm.h | 16 +- 6 files changed, 552 insertions(+), 185 deletions(-) create mode 100644 drivers/gpu/drm/virtio/virtgpu_submit.c -- 2.39.2
> Dmitry Osipenko (3): > drm/virtio: Refactor and optimize job submission code path > drm/virtio: Wait for each dma-fence of in-fence array individually Applied these two patches to misc-next. The syncobj patch will wait for the turnip Mesa MR. -- Best regards, Dmitry
On 4/16/23 14:52, Dmitry Osipenko wrote: > 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. Gerd, do you have any objections to merging this series? We have AMDGPU [1] and Intel [2] native context WIP drivers depending on the sync object support. It is the only part missing from kernel today that is wanted by the native context drivers. Otherwise, there are few other things in Qemu and virglrenderer left to sort out. [1] https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/21658 [2] https://gitlab.freedesktop.org/digetx/mesa/-/commits/native-context-iris -- Best regards, Dmitry
On Mon, May 01, 2023 at 06:38:45PM +0300, Dmitry Osipenko wrote: > On 4/16/23 14:52, Dmitry Osipenko wrote: > > 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. > > Gerd, do you have any objections to merging this series? No objections. Can't spot any issues, but I also don't follow drm close enough to be able to review the sync object logic in detail. Acked-by: Gerd Hoffmann <kraxel@redhat.com> take care, Gerd
On 5/3/23 09:51, Gerd Hoffmann wrote: > On Mon, May 01, 2023 at 06:38:45PM +0300, Dmitry Osipenko wrote: >> On 4/16/23 14:52, Dmitry Osipenko wrote: >>> 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. >> >> Gerd, do you have any objections to merging this series? > > No objections. Can't spot any issues, but I also don't follow drm close > enough to be able to review the sync object logic in detail. > > Acked-by: Gerd Hoffmann <kraxel@redhat.com> Thanks, I'll work with Gurchetan on resolving his questions and will apply the patches as soon as he'll give his ack. -- Best regards, Dmitry
© 2016 - 2025 Red Hat, Inc.