The series is
Reviewed-by: Chia-I Wu olvaffe@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@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