[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-Id: <20230416115237.798604-1-dmitry.osipenko@collabora.com>
Date: Sun, 16 Apr 2023 14:52:34 +0300
From: Dmitry Osipenko <dmitry.osipenko@...labora.com>
To: David Airlie <airlied@...hat.com>,
Gerd Hoffmann <kraxel@...hat.com>,
Gurchetan Singh <gurchetansingh@...omium.org>,
Chia-I Wu <olvaffe@...il.com>, Daniel Vetter <daniel@...ll.ch>,
Rob Clark <robdclark@...il.com>,
Marek Olšák <maraeo@...il.com>,
Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@....com>,
Emil Velikov <emil.velikov@...labora.com>
Cc: dri-devel@...ts.freedesktop.org, linux-kernel@...r.kernel.org,
kernel@...labora.com, virtualization@...ts.linux-foundation.org
Subject: [PATCH v6 0/3] Add sync object UAPI support to VirtIO-GPU driver
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
Powered by blists - more mailing lists