@samitouri / QOSamiQemu / commits / 94cfb5afe7

igvm: cleanup memory regions

This change cleans up existing memory regions that were created by the current IGVM. The cleanup would be necessary when a new IGVM is loaded. This cleanup function is called in a subsequent patch. Reviewed-by: Alexander Graf <graf@amazon.com> Tested-by: Ani Sinha <anisinha@redhat.com> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> Message-ID: <20260817142010.80693-4-anisinha@redhat.com> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>

Gerd Hoffmann committed Aug 17, 2026 at 19:49 UTC 94cfb5afe77858536265c957f47d10d85d75908c
3 files changed +22
backends/igvm-cfg.c
+2
@@ -52,6 +52,8 @@ static void igvm_reset_hold(Object *obj, ResetType type)
52
53 trace_igvm_reset_hold(type);
54
55 + /* cleanup existing memory regions first */
56 + qigvm_cleanup_memory(igvm);
57 qigvm_process_file(igvm, ms, false, &error_fatal);
58 }
59
backends/igvm.c
+19
@@ -14,6 +14,7 @@
14 #include "qapi/error.h"
15 #include "qemu/error-report.h"
16 #include "qemu/target-info-qapi.h"
17 +#include "migration/vmstate.h"
18 #include "system/igvm.h"
19 #include "system/igvm-cfg.h"
20 #include "system/igvm-internal.h"
@@ -1109,3 +1110,21 @@ cleanup_parameters:
1110 cleanup:
1111 return retval;
1112 }
1113 +
1114 +/*
1115 + * cleanup any memory regions created by qigvm_prepare_memory()
1116 + */
1117 +void qigvm_cleanup_memory(IgvmCfg *cfg)
1118 +{
1119 + IgvmMemoryRegion *imr, *tmp;
1120 +
1121 + QTAILQ_FOREACH_SAFE(imr, &cfg->memory_regions, next, tmp)
1122 + {
1123 + memory_region_del_subregion(get_system_memory(), imr->mr);
1124 + vmstate_unregister_ram(imr->mr, NULL);
1125 + QTAILQ_REMOVE(&cfg->memory_regions, imr, next);
1126 + /* this triggers MemoryRegion cleanup */
1127 + object_unparent(OBJECT(imr->mr));
1128 + g_free(imr);
1129 + }
1130 +}
include/system/igvm.h
+1
@@ -20,6 +20,7 @@ typedef struct QIgvm QIgvm;
20
21 int qigvm_process_file(IgvmCfg *igvm, MachineState *machine_state,
22 bool onlyVpContext, Error **errp);
23 +void qigvm_cleanup_memory(IgvmCfg *igvm);
24
25 /* x86 native */
26 int qigvm_x86_get_mem_map_entry(int index,