From: "Dr. David Alan Gilbert" <dgilb...@redhat.com> Copy the temporary region data we calculated into the device state.
Signed-off-by: Dr. David Alan Gilbert <dgilb...@redhat.com> --- hw/virtio/vhost.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/hw/virtio/vhost.c b/hw/virtio/vhost.c index ae3d57df1d..34011f9acb 100644 --- a/hw/virtio/vhost.c +++ b/hw/virtio/vhost.c @@ -787,7 +787,21 @@ static int vhost_update_mem(struct vhost_dev *dev) trace_vhost_update_mem_comparison(need_update, (uint64_t)change_start, (uint64_t)change_end); - /* TODO */ + if (need_update) { + /* Update the main regions list from our tmp */ + size_t mem_size = offsetof(struct vhost_memory, regions) + + (vtmp.nregions + 1) * sizeof dev->mem->regions[0]; + + dev->mem = g_realloc(dev->mem, mem_size); + dev->mem->nregions = vtmp.nregions; + memcpy(dev->mem->regions, vtmp.regions, + vtmp.nregions * sizeof dev->mem->regions[0]); + used_memslots = vtmp.nregions; + + dev->mem_changed_start_addr = change_start; + dev->mem_changed_end_addr = change_end; + } + out: g_free(vtmp.regions); return res; -- 2.14.3