A virtio device that had an error during reset will be marked as broken and will not report reset completion to the guest.
Signed-off-by: Akihiko Odaki <[email protected]> --- hw/virtio/virtio.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/hw/virtio/virtio.c b/hw/virtio/virtio.c index ed43c8bcb0bd..0b245f73f9d1 100644 --- a/hw/virtio/virtio.c +++ b/hw/virtio/virtio.c @@ -3443,6 +3443,7 @@ void virtio_reset(VirtIODevice *vdev) } } + vdev->broken = false; k->reset(vdev); } @@ -3454,11 +3455,14 @@ void virtio_complete_reset(VirtIODevice *vdev) vdev->start_on_kick = false; vdev->started = false; - vdev->broken = false; virtio_features_clear(features); virtio_set_features_nocheck(vdev, features); vdev->queue_sel = 0; - vdev->status = 0; + + if (!vdev->broken) { + vdev->status = 0; + } + vdev->disabled = false; qatomic_set(&vdev->isr, 0); vdev->config_vector = VIRTIO_NO_VECTOR; -- 2.55.0
