Re: [PATCH RFC 15/15] hw/virtio/vhost-user: shadow vq cleanup
Akihiko Odaki <[email protected]> Sat, 25 Jul 2026 00:22:23 +0900
| Newsgroups | dev.linux.lists.virtio-fs,org.nongnu.qemu-devel |
|---|---|
| Message-ID | <[email protected]> |
On 2026/07/24 7:30, Connor Kite wrote: > Implements functionality to cleanup svqs on cleanup of isolation > regions. > > Signed-off-by: Connor Kite <[email protected]> > --- > hw/virtio/vhost-user.c | 10 ++++++++++ > 1 file changed, 10 insertions(+) > > diff --git a/hw/virtio/vhost-user.c b/hw/virtio/vhost-user.c > index e65f877f9a..bb4de78b95 100644 > --- a/hw/virtio/vhost-user.c > +++ b/hw/virtio/vhost-user.c > @@ -1140,6 +1140,15 @@ static int vhost_user_set_mem_table_postcopy(struct vhost_dev *dev, > return 0; > } > > +static void vhost_user_svq_cleanup(struct vhost_user *u) > +{ > + for (int i = 0; i < u->shadow_vqs->len; i++) { > + vhost_svq_stop(g_ptr_array_index(u->shadow_vqs, i)); > + } > + > + g_ptr_array_free(u->shadow_vqs, true); > +} > + > /* TODO: Is there any notifier cleanup required here?*/ > static void cleanup_isolation_regions(struct vhost_dev *dev) > { > @@ -1147,6 +1156,7 @@ static void cleanup_isolation_regions(struct vhost_dev *dev) > if (u->iso_memory.base_addr) { > vhost_iova_tree_delete(u->iso_iova_tree); > u->iso_iova_tree = NULL; > + vhost_user_svq_cleanup(u); Memory-table refresh frees live SVQs permanently. init_isolation_regions() uses cleanup for refreshes, but cleanup frees shadow_vqs; they are created only once during backend initialization. Regards, Akihiko Odaki > memset(&u->iso_memory, 0, sizeof(IsolationRegion)); > qemu_memfd_free((gpointer) u->iso_memory.base_addr, u->iso_memory.size, > u->iso_memory.iso_fd); >