On Mon, Feb 17, 2025 at 05:40:04PM +0100, Albert Esteve wrote: > diff --git a/hw/virtio/virtio.c b/hw/virtio/virtio.c > index 85110bce37..47d0ddb820 100644 > --- a/hw/virtio/virtio.c > +++ b/hw/virtio/virtio.c > @@ -3063,6 +3063,75 @@ int virtio_save(VirtIODevice *vdev, QEMUFile *f) > return vmstate_save_state(f, &vmstate_virtio, vdev, NULL); > } > > +VirtSharedMemory *virtio_new_shmem_region(VirtIODevice *vdev) > +{ > + ++vdev->n_shmem_regions; > + vdev->shmem_list = g_renew(VirtSharedMemory, vdev->shmem_list, > + vdev->n_shmem_regions); > + vdev->shmem_list[vdev->n_shmem_regions - 1].mr = g_new0(MemoryRegion, 1); > + QTAILQ_INIT(&vdev->shmem_list[vdev->n_shmem_regions - 1].mmaps); > + return &vdev->shmem_list[vdev->n_shmem_regions - 1]; > +}
On second thought, it would be easier to change shmem_list's type to VirtSharedMemory** and g_renew(VirtSharedMemory*, ...). That way the array approach can be kept without worrying about reallocating the VirtSharedMemory structs themselves. Only the array of pointers is reallocated. Stefan
signature.asc
Description: PGP signature