From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>
Copy the temporary region data we calculated into the device state.
Signed-off-by: Dr. David Alan Gilbert <dgilbert@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