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


Reply via email to