--- /dev/null
+From c6477978bb7cff342536cb94d446cbb15bcf5180 Mon Sep 17 00:00:00 2001
+From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+Date: Thu, 16 Jan 2020 20:37:53 +0100
+Subject: Revert "drm/virtio: switch virtio_gpu_wait_ioctl() to gem helper."
+
+From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+This reverts commit e6733ec8948475c4b62574e452135dc629294d75 which is
+commit 29cf12394c0565d7eb1685bf0c1b4749aa6a8b66 upstream.
+
+Alistair writes:
+ After updating to 5.4.7 we noticed that virtio_gpu's wait ioctl
+ stopped working correctly.
+
+ It looks like 29cf12394c05 ("drm/virtio: switch
+ virtio_gpu_wait_ioctl() to gem helper.") was picked up automatically,
+ but it depends on 889165ad6190 ("drm/virtio: pass gem reservation
+ object to ttm init") from earlier in Gerd's series in Linus's tree,
+ which was not picked up.
+
+Cc: Gerd Hoffmann <kraxel@redhat.com>
+Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
+Cc: Chia-I Wu <olvaffe@gmail.com>
+Cc: Sasha Levin <sashal@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/gpu/drm/virtio/virtgpu_ioctl.c | 28 ++++++++++++----------------
+ 1 file changed, 12 insertions(+), 16 deletions(-)
+
+--- a/drivers/gpu/drm/virtio/virtgpu_ioctl.c
++++ b/drivers/gpu/drm/virtio/virtgpu_ioctl.c
+@@ -463,29 +463,25 @@ out:
+ }
+
+ static int virtio_gpu_wait_ioctl(struct drm_device *dev, void *data,
+- struct drm_file *file)
++ struct drm_file *file)
+ {
+ struct drm_virtgpu_3d_wait *args = data;
+- struct drm_gem_object *obj;
+- long timeout = 15 * HZ;
++ struct drm_gem_object *gobj = NULL;
++ struct virtio_gpu_object *qobj = NULL;
+ int ret;
++ bool nowait = false;
+
+- obj = drm_gem_object_lookup(file, args->handle);
+- if (obj == NULL)
++ gobj = drm_gem_object_lookup(file, args->handle);
++ if (gobj == NULL)
+ return -ENOENT;
+
+- if (args->flags & VIRTGPU_WAIT_NOWAIT) {
+- ret = dma_resv_test_signaled_rcu(obj->resv, true);
+- } else {
+- ret = dma_resv_wait_timeout_rcu(obj->resv, true, true,
+- timeout);
+- }
+- if (ret == 0)
+- ret = -EBUSY;
+- else if (ret > 0)
+- ret = 0;
++ qobj = gem_to_virtio_gpu_obj(gobj);
+
+- drm_gem_object_put_unlocked(obj);
++ if (args->flags & VIRTGPU_WAIT_NOWAIT)
++ nowait = true;
++ ret = virtio_gpu_object_wait(qobj, nowait);
++
++ drm_gem_object_put_unlocked(gobj);
+ return ret;
+ }
+