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
