|
From: | Stefano Garzarella |
Subject: | Re: [RFC 06/10] vdpa-dev: implement the unrealize interface |
Date: | Wed, 5 Jan 2022 12:16:12 +0100 |
On Wed, Jan 05, 2022 at 08:58:56AM +0800, Longpeng(Mike) wrote:
From: Longpeng <longpeng2@huawei.com> Implements the .unrealize interface. Signed-off-by: Longpeng <longpeng2@huawei.com> --- hw/virtio/vdpa-dev.c | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/hw/virtio/vdpa-dev.c b/hw/virtio/vdpa-dev.c index 2d534d837a..4e4dd3d201 100644 --- a/hw/virtio/vdpa-dev.c +++ b/hw/virtio/vdpa-dev.c @@ -133,9 +133,29 @@ out: close(fd); } +static void vhost_vdpa_vdev_unrealize(VhostVdpaDevice *s) +{ + VirtIODevice *vdev = VIRTIO_DEVICE(s); + int i; + + for (i = 0; i < s->num_queues; i++) {
^`s->num_queues` seems uninitialized to me, maybe we could just remove the num_queues field from VhostVdpaDevice, and use `s->dev.nvqs` as in vhost_vdpa_device_realize().
+ 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_dev_cleanup(&s->dev);
If we will use `s->dev.nvqs` in vhost_vdpa_vdev_unrealize(), we should call vhost_dev_cleanup() after it, just before close() as we already do in the error path of vhost_vdpa_device_realize().
+ vhost_vdpa_vdev_unrealize(s); + close(s->vdpa.device_fd); } static void -- 2.23.0
[Prev in Thread] | Current Thread | [Next in Thread] |