Message ID | 20220117124331.1642-7-longpeng2@huawei.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | add generic vDPA device support | expand |
On Mon, Jan 17, 2022 at 08:43:27PM +0800, Longpeng(Mike) via wrote: >From: Longpeng <longpeng2@huawei.com> > >Implements the .unrealize interface. > >Signed-off-by: Longpeng <longpeng2@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
> -----Original Message----- > From: Stefano Garzarella [mailto:sgarzare@redhat.com] > Sent: Wednesday, January 19, 2022 7:36 PM > To: Longpeng (Mike, Cloud Infrastructure Service Product Dept.) > <longpeng2@huawei.com> > Cc: stefanha@redhat.com; mst@redhat.com; cohuck@redhat.com; > pbonzini@redhat.com; Gonglei (Arei) <arei.gonglei@huawei.com>; Yechuan > <yechuan@huawei.com>; Huangzhichao <huangzhichao@huawei.com>; > qemu-devel@nongnu.org > Subject: Re: [PATCH v2 06/10] vdpa-dev: implement the unrealize interface > > On Mon, Jan 17, 2022 at 08:43:27PM +0800, Longpeng(Mike) via wrote: > >From: Longpeng <longpeng2@huawei.com> > > > >Implements the .unrealize interface. > > > >Signed-off-by: Longpeng <longpeng2@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(). > Make sense. Will do. > Stefano
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