diff --git a/drivers/gpu/drm/virtio/virtgpu_kms.c b/drivers/gpu/drm/virtio/virtgpu_kms.c index 922782bdc9cd..223d5d513b5a 100644 --- a/drivers/gpu/drm/virtio/virtgpu_kms.c +++ b/drivers/gpu/drm/virtio/virtgpu_kms.c @@ -301,18 +301,24 @@ int virtio_gpu_init(struct virtio_device *vdev, struct drm_device *dev) virtio_gpu_cmd_get_edids(vgdev); virtio_gpu_cmd_get_display_info(vgdev); virtio_gpu_notify(vgdev); - wait_event_timeout(vgdev->resp_wq, !vgdev->display_info_pending, - 5 * HZ); + if (!wait_event_timeout(vgdev->resp_wq, + !vgdev->display_info_pending, + 5 * HZ)) { + DRM_ERROR("timed out waiting for display info\n"); + ret = -ETIMEDOUT; + goto err_reset_device; + } } vgdev->pm_nb.notifier_call = virtio_gpu_pm_notifier; ret = register_pm_notifier(&vgdev->pm_nb); if (ret) - goto err_modeset_fini; + goto err_reset_device; return 0; -err_modeset_fini: +err_reset_device: + virtio_reset_device(vgdev->vdev); virtio_gpu_modeset_fini(vgdev); err_scanouts: virtio_gpu_free_vbufs(vgdev);