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); +} + 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; } static void -- 2.23.0