[PATCH v9 00/18] drm/virtio: switch from ttm to gem shmem helpers.

Chia-I Wu olvaffe at gmail.com
Thu Aug 29 23:44:49 UTC 2019


The series is

  Reviewed-by: Chia-I Wu <olvaffe at gmail.com>

However I ran into a deadlock with one GPU-heavy app.  When I exits
Unigine Valley benchmark with ctrl-c, the entire driver locks up
probably 8 out of 10 times on my machine.  When that happens,
virtio_gpu_dequeue_ctrl_func does not return and is blocked inside
virtio_gpu_array_put_free.

It seems, when the vq becomes full or near full between reclaim_vbufs
and virtio_gpu_array_put_free, virtio_gpu_array_put_free can not free
all of the objects because each call to virtio_gpu_free_object needs
to add several commands to vq.  One of the calls ends up being blocked
at "wait_event(vgdev->ctrlq.ack_queue, ...)".


On Thu, Aug 29, 2019 at 3:33 AM Gerd Hoffmann <kraxel at redhat.com> wrote:
>
> ttm increasingly gets into the way while hacking on virtio-gpu memory
> management.  It also overkill for what virtio-gpu needs.  Lets get rid
> of it.
>
> v9:
>  - rebase to latest dem-misc-next, adapt to changes.
>  - fix issues found by Chia-I Wu.
> v8:
>  - rebase to latest drm-misc-next, adapt to changes.
> v7:
>  - rebase to latest drm-misc-next
>  - reorder patches: switch all virtio commands to object array helpers
>    first. then drop ttm, to make sure we don't release objects still in
>    use.
>  - misc fixes.
> v6:
>  - largely rewrite fencing logic, using the virtio_gpu_array_* helpers
>  - add more patches to the series.
> v5:
>  - fence bugfixes.
>  - minor optimizations.
> v4:
>  - make gem array helpers private to virtio.
>  - misc minor fixes.
> v3:
>  - add gem array helpers.
>  - rework fencing.
>
> please review.
>
> thanks,
>   Gerd
>
> Gerd Hoffmann (18):
>   drm/virtio: pass gem reservation object to ttm init
>   drm/virtio: switch virtio_gpu_wait_ioctl() to gem helper.
>   drm/virtio: simplify cursor updates
>   drm/virtio: remove virtio_gpu_object_wait
>   drm/virtio: drop no_wait argument from virtio_gpu_object_reserve
>   drm/virtio: remove ttm calls from in
>     virtio_gpu_object_{reserve,unreserve}
>   drm/virtio: add virtio_gpu_object_array & helpers
>   drm/virtio: rework virtio_gpu_execbuffer_ioctl fencing
>   drm/virtio: rework virtio_gpu_object_create fencing
>   drm/virtio: rework virtio_gpu_transfer_from_host_ioctl fencing
>   drm/virtio: rework virtio_gpu_transfer_to_host_ioctl fencing
>   drm/virtio: rework virtio_gpu_cmd_context_{attach,detach}_resource
>   drm/virtio: drop virtio_gpu_object_list_validate/virtio_gpu_unref_list
>   drm/virtio: switch from ttm to gem shmem helpers
>   drm/virtio: remove virtio_gpu_alloc_object
>   drm/virtio: drop virtio_gpu_object_{ref,unref}
>   drm/virtio: drop virtio_gpu_object_{reserve,unreserve}
>   drm/virtio: add fence sanity check
>
>  drivers/gpu/drm/virtio/virtgpu_drv.h    | 123 +++-------
>  drivers/gpu/drm/virtio/virtgpu_drv.c    |  20 +-
>  drivers/gpu/drm/virtio/virtgpu_fence.c  |   4 +
>  drivers/gpu/drm/virtio/virtgpu_gem.c    | 156 ++++++++----
>  drivers/gpu/drm/virtio/virtgpu_ioctl.c  | 224 ++++++-----------
>  drivers/gpu/drm/virtio/virtgpu_kms.c    |   9 -
>  drivers/gpu/drm/virtio/virtgpu_object.c | 222 ++++++-----------
>  drivers/gpu/drm/virtio/virtgpu_plane.c  |  34 +--
>  drivers/gpu/drm/virtio/virtgpu_prime.c  |  34 ---
>  drivers/gpu/drm/virtio/virtgpu_ttm.c    | 305 ------------------------
>  drivers/gpu/drm/virtio/virtgpu_vq.c     |  78 ++++--
>  drivers/gpu/drm/virtio/Kconfig          |   2 +-
>  drivers/gpu/drm/virtio/Makefile         |   2 +-
>  13 files changed, 376 insertions(+), 837 deletions(-)
>  delete mode 100644 drivers/gpu/drm/virtio/virtgpu_ttm.c
>
> --
> 2.18.1
>


More information about the dri-devel mailing list