Message ID | 20230926185738.277351-16-david@redhat.com |
---|---|
State | New |
Headers | show |
Series | virtio-mem: Expose device memory through multiple memslots | expand |
On 26.09.2023 20:57, David Hildenbrand wrote: > It's cleaner and future-proof to just have other state that depends on the > bitmap state to be updated as soon as possible when restoring the bitmap. > > So factor out informing RamDiscardListener into a functon and call it in > case of early migration right after we restored the bitmap. > > Signed-off-by: David Hildenbrand <david@redhat.com> > --- > hw/virtio/virtio-mem.c | 26 +++++++++++++++++++++----- > 1 file changed, 21 insertions(+), 5 deletions(-) > > diff --git a/hw/virtio/virtio-mem.c b/hw/virtio/virtio-mem.c > index 0b0e6c5090..0cf47df9cf 100644 > --- a/hw/virtio/virtio-mem.c > +++ b/hw/virtio/virtio-mem.c > @@ -984,9 +984,8 @@ static int virtio_mem_restore_unplugged(VirtIOMEM *vmem) > virtio_mem_discard_range_cb); > } > > -static int virtio_mem_post_load(void *opaque, int version_id) > +static int virtio_mem_post_load_bitmap(VirtIOMEM *vmem) > { > - VirtIOMEM *vmem = VIRTIO_MEM(opaque); > RamDiscardListener *rdl; > int ret; > > @@ -1001,6 +1000,20 @@ static int virtio_mem_post_load(void *opaque, int version_id) > return ret; > } > } > + return 0; > +} > + > +static int virtio_mem_post_load(void *opaque, int version_id) > +{ > + VirtIOMEM *vmem = VIRTIO_MEM(opaque); > + int ret; > + > + if (!vmem->early_migration) { > + ret = virtio_mem_post_load_bitmap(vmem); > + if (ret) { > + return ret; > + } > + } > > /* > * If shared RAM is migrated using the file content and not using QEMU, > @@ -1043,7 +1056,7 @@ static int virtio_mem_post_load_early(void *opaque, int version_id) > int ret; > > if (!vmem->prealloc) { > - return 0; > + goto post_load_bitmap; > } > > /* > @@ -1051,7 +1064,7 @@ static int virtio_mem_post_load_early(void *opaque, int version_id) > * don't mess with preallocation and postcopy. > */ > if (migrate_ram_is_ignored(rb)) { > - return 0; > + goto post_load_bitmap; > } > > /* > @@ -1084,7 +1097,10 @@ static int virtio_mem_post_load_early(void *opaque, int version_id) > return -EBUSY; > } > } > - return 0; > + > +post_load_bitmap: > + /* Finally, update any other state to be consistent with the new bitmap. */ > + return virtio_mem_post_load_bitmap(vmem); > } > > typedef struct VirtIOMEMMigSanityChecks { Reviewed-by: Maciej S. Szmigiero <maciej.szmigiero@oracle.com> Thanks, Maciej
diff --git a/hw/virtio/virtio-mem.c b/hw/virtio/virtio-mem.c index 0b0e6c5090..0cf47df9cf 100644 --- a/hw/virtio/virtio-mem.c +++ b/hw/virtio/virtio-mem.c @@ -984,9 +984,8 @@ static int virtio_mem_restore_unplugged(VirtIOMEM *vmem) virtio_mem_discard_range_cb); } -static int virtio_mem_post_load(void *opaque, int version_id) +static int virtio_mem_post_load_bitmap(VirtIOMEM *vmem) { - VirtIOMEM *vmem = VIRTIO_MEM(opaque); RamDiscardListener *rdl; int ret; @@ -1001,6 +1000,20 @@ static int virtio_mem_post_load(void *opaque, int version_id) return ret; } } + return 0; +} + +static int virtio_mem_post_load(void *opaque, int version_id) +{ + VirtIOMEM *vmem = VIRTIO_MEM(opaque); + int ret; + + if (!vmem->early_migration) { + ret = virtio_mem_post_load_bitmap(vmem); + if (ret) { + return ret; + } + } /* * If shared RAM is migrated using the file content and not using QEMU, @@ -1043,7 +1056,7 @@ static int virtio_mem_post_load_early(void *opaque, int version_id) int ret; if (!vmem->prealloc) { - return 0; + goto post_load_bitmap; } /* @@ -1051,7 +1064,7 @@ static int virtio_mem_post_load_early(void *opaque, int version_id) * don't mess with preallocation and postcopy. */ if (migrate_ram_is_ignored(rb)) { - return 0; + goto post_load_bitmap; } /* @@ -1084,7 +1097,10 @@ static int virtio_mem_post_load_early(void *opaque, int version_id) return -EBUSY; } } - return 0; + +post_load_bitmap: + /* Finally, update any other state to be consistent with the new bitmap. */ + return virtio_mem_post_load_bitmap(vmem); } typedef struct VirtIOMEMMigSanityChecks {
It's cleaner and future-proof to just have other state that depends on the bitmap state to be updated as soon as possible when restoring the bitmap. So factor out informing RamDiscardListener into a functon and call it in case of early migration right after we restored the bitmap. Signed-off-by: David Hildenbrand <david@redhat.com> --- hw/virtio/virtio-mem.c | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-)