Move the virtio_complete_reset() call to VirtioDeviceClass::reset implementations to allow changing the completion timing.
Signed-off-by: Akihiko Odaki <[email protected]> --- hw/9pfs/virtio-9p-device.c | 1 + hw/audio/virtio-snd.c | 2 ++ hw/block/vhost-user-blk.c | 1 + hw/block/virtio-blk.c | 1 + hw/char/virtio-serial-bus.c | 1 + hw/display/vhost-user-gpu.c | 3 +-- hw/display/virtio-gpu-base.c | 2 ++ hw/input/virtio-input.c | 2 ++ hw/net/virtio-net.c | 1 + hw/scsi/vhost-user-scsi.c | 1 + hw/scsi/virtio-scsi.c | 2 ++ hw/virtio/virtio-balloon.c | 1 + hw/virtio/virtio-crypto.c | 2 ++ hw/virtio/virtio.c | 7 ++----- 14 files changed, 20 insertions(+), 7 deletions(-) diff --git a/hw/9pfs/virtio-9p-device.c b/hw/9pfs/virtio-9p-device.c index 2774fc2290a8..c9de102d39c1 100644 --- a/hw/9pfs/virtio-9p-device.c +++ b/hw/9pfs/virtio-9p-device.c @@ -115,6 +115,7 @@ static void virtio_9p_reset(VirtIODevice *vdev) V9fsVirtioState *v = (V9fsVirtioState *)vdev; v9fs_reset(&v->state); + virtio_complete_reset(vdev); } static ssize_t coroutine_fn diff --git a/hw/audio/virtio-snd.c b/hw/audio/virtio-snd.c index 694bcebb60f6..40bae0cb9c82 100644 --- a/hw/audio/virtio-snd.c +++ b/hw/audio/virtio-snd.c @@ -1383,6 +1383,8 @@ static void virtio_snd_reset(VirtIODevice *vdev) virtio_snd_ctrl_cmd_free(cmd); } } + + virtio_complete_reset(vdev); } static void virtio_snd_class_init(ObjectClass *klass, const void *data) diff --git a/hw/block/vhost-user-blk.c b/hw/block/vhost-user-blk.c index 2e5b3ae1b14b..09e52745b31c 100644 --- a/hw/block/vhost-user-blk.c +++ b/hw/block/vhost-user-blk.c @@ -348,6 +348,7 @@ static void vhost_user_blk_reset(VirtIODevice *vdev) VHostUserBlk *s = VHOST_USER_BLK(vdev); vhost_dev_free_inflight(s->inflight); + virtio_complete_reset(vdev); } static int vhost_user_blk_connect(DeviceState *dev, Error **errp) diff --git a/hw/block/virtio-blk.c b/hw/block/virtio-blk.c index 6b92066aff4c..a8ae8294fa47 100644 --- a/hw/block/virtio-blk.c +++ b/hw/block/virtio-blk.c @@ -1168,6 +1168,7 @@ static void virtio_blk_reset(VirtIODevice *vdev) } blk_set_enable_write_cache(s->blk, s->original_wce); + virtio_complete_reset(vdev); } /* coalesce internal state, copy to pci i/o region 0 diff --git a/hw/char/virtio-serial-bus.c b/hw/char/virtio-serial-bus.c index c1973f0248fc..5efca2505990 100644 --- a/hw/char/virtio-serial-bus.c +++ b/hw/char/virtio-serial-bus.c @@ -638,6 +638,7 @@ static void vser_reset(VirtIODevice *vdev) vser = VIRTIO_SERIAL(vdev); guest_reset(vser); + virtio_complete_reset(vdev); } static void virtio_serial_save_device(VirtIODevice *vdev, QEMUFile *f) diff --git a/hw/display/vhost-user-gpu.c b/hw/display/vhost-user-gpu.c index cd684d63639e..f8d640557c28 100644 --- a/hw/display/vhost-user-gpu.c +++ b/hw/display/vhost-user-gpu.c @@ -640,9 +640,8 @@ vhost_user_gpu_reset(VirtIODevice *vdev) { VhostUserGPU *g = VHOST_USER_GPU(vdev); - virtio_gpu_base_reset(VIRTIO_GPU_BASE(vdev)); - vhost_user_backend_stop(g->vhost); + virtio_gpu_base_reset(VIRTIO_GPU_BASE(vdev)); } static int diff --git a/hw/display/virtio-gpu-base.c b/hw/display/virtio-gpu-base.c index 270fbaae1029..d7032ac1def2 100644 --- a/hw/display/virtio-gpu-base.c +++ b/hw/display/virtio-gpu-base.c @@ -36,6 +36,8 @@ virtio_gpu_base_reset(VirtIOGPUBase *g) g->scanout[i].y = 0; g->scanout[i].ds = NULL; } + + virtio_complete_reset(VIRTIO_DEVICE(g)); } void diff --git a/hw/input/virtio-input.c b/hw/input/virtio-input.c index 6494cfbbe82d..0a533a6fff6e 100644 --- a/hw/input/virtio-input.c +++ b/hw/input/virtio-input.c @@ -216,6 +216,8 @@ static void virtio_input_reset(VirtIODevice *vdev) vic->change_active(vinput); } } + + virtio_complete_reset(vdev); } static int virtio_input_post_load(void *opaque, int version_id) diff --git a/hw/net/virtio-net.c b/hw/net/virtio-net.c index 814b99a43d20..bd12780076f4 100644 --- a/hw/net/virtio-net.c +++ b/hw/net/virtio-net.c @@ -4151,6 +4151,7 @@ static void virtio_net_reset(VirtIODevice *vdev) } virtio_net_disable_rss(n); + virtio_complete_reset(vdev); } static void virtio_net_instance_init(Object *obj) diff --git a/hw/scsi/vhost-user-scsi.c b/hw/scsi/vhost-user-scsi.c index 5070178dc28b..6f525268f93a 100644 --- a/hw/scsi/vhost-user-scsi.c +++ b/hw/scsi/vhost-user-scsi.c @@ -371,6 +371,7 @@ static void vhost_user_scsi_reset(VirtIODevice *vdev) VHostSCSICommon *vsc = VHOST_SCSI_COMMON(s); vhost_dev_free_inflight(vsc->inflight); + virtio_complete_reset(vdev); } static struct vhost_dev *vhost_user_scsi_get_vhost(VirtIODevice *vdev) diff --git a/hw/scsi/virtio-scsi.c b/hw/scsi/virtio-scsi.c index bf64d1231a81..c70cef7ba122 100644 --- a/hw/scsi/virtio-scsi.c +++ b/hw/scsi/virtio-scsi.c @@ -1028,6 +1028,8 @@ static void virtio_scsi_reset(VirtIODevice *vdev) WITH_QEMU_LOCK_GUARD(&s->event_lock) { s->events_dropped = false; } + + virtio_complete_reset(vdev); } typedef struct { diff --git a/hw/virtio/virtio-balloon.c b/hw/virtio/virtio-balloon.c index 4c5f486ba238..e3a8545fa612 100644 --- a/hw/virtio/virtio-balloon.c +++ b/hw/virtio/virtio-balloon.c @@ -954,6 +954,7 @@ static void virtio_balloon_device_reset(VirtIODevice *vdev) } s->poison_val = 0; + virtio_complete_reset(vdev); } static int virtio_balloon_set_status(VirtIODevice *vdev, uint8_t status) diff --git a/hw/virtio/virtio-crypto.c b/hw/virtio/virtio-crypto.c index 79e2acb56cc4..bab09f6f8714 100644 --- a/hw/virtio/virtio-crypto.c +++ b/hw/virtio/virtio-crypto.c @@ -1015,6 +1015,8 @@ static void virtio_crypto_reset(VirtIODevice *vdev) } else { vcrypto->status |= VIRTIO_CRYPTO_S_HW_READY; } + + virtio_complete_reset(vdev); } static uint32_t virtio_crypto_init_services(uint32_t qservices) diff --git a/hw/virtio/virtio.c b/hw/virtio/virtio.c index 8d5f58a02df6..ed43c8bcb0bd 100644 --- a/hw/virtio/virtio.c +++ b/hw/virtio/virtio.c @@ -3443,11 +3443,7 @@ void virtio_reset(VirtIODevice *vdev) } } - if (k->reset) { - k->reset(vdev); - } - - virtio_complete_reset(vdev); + k->reset(vdev); } void virtio_complete_reset(VirtIODevice *vdev) @@ -4483,6 +4479,7 @@ static void virtio_device_class_init(ObjectClass *klass, const void *data) dc->unrealize = virtio_device_unrealize; dc->bus_type = TYPE_VIRTIO_BUS; device_class_set_props(dc, virtio_properties); + vdc->reset = virtio_complete_reset; vdc->start_ioeventfd = virtio_device_start_ioeventfd_impl; vdc->stop_ioeventfd = virtio_device_stop_ioeventfd_impl; -- 2.55.0
