On Mon, Jan 17, 2022 at 08:43:27PM +0800, Longpeng(Mike) via wrote:
From: Longpeng <longpe...@huawei.com>
Implements the .unrealize interface.
Signed-off-by: Longpeng <longpe...@huawei.com>
---
hw/virtio/vdpa-dev.c | 24 +++++++++++++++++++++++-
1 file changed, 23 insertions(+), 1 deletion(-)
diff --git a/hw/virtio/vdpa-dev.c b/hw/virtio/vdpa-dev.c
index bd28cf7a15..e5691d02bb 100644
--- a/hw/virtio/vdpa-dev.c
+++ b/hw/virtio/vdpa-dev.c
@@ -132,9 +132,31 @@ out:
s->vdpa_dev_fd = -1;
}
+static void vhost_vdpa_vdev_unrealize(VhostVdpaDevice *s)
+{
+ VirtIODevice *vdev = VIRTIO_DEVICE(s);
+ int i;
+
+ for (i = 0; i < s->num_queues; i++) {
+ virtio_delete_queue(s->virtqs[i]);
+ }
+ g_free(s->virtqs);
+ virtio_cleanup(vdev);
+
+ g_free(s->config);
Is there a particular reason for these steps in a separate function?
+}
+
static void vhost_vdpa_device_unrealize(DeviceState *dev)
{
- return;
+ VirtIODevice *vdev = VIRTIO_DEVICE(dev);
+ VhostVdpaDevice *s = VHOST_VDPA_DEVICE(vdev);
+
+ virtio_set_status(vdev, 0);
+ vhost_vdpa_vdev_unrealize(s);
+ g_free(s->dev.vqs);
+ vhost_dev_cleanup(&s->dev);
+ qemu_close(s->vdpa_dev_fd);
+ s->vdpa_dev_fd = -1;
}
Maybe we can have all steps (in the reverse order of
vhost_vdpa_device_realize) in vhost_vdpa_device_unrealize().
Stefano