Re: [PATCH v3 2/9] igvm: track memory regions
Ani Sinha <[email protected]> Sat, 1 Aug 2026 17:57:56 +0530
| Newsgroups | org.nongnu.qemu-devel |
|---|---|
| Message-ID | <[email protected]> |
> On 31 Jul 2026, at 3:28 PM, Alexander Graf <[email protected]> wrote: > > > On 30.07.26 09:12, Ani Sinha wrote: >> From: Gerd Hoffmann <[email protected]> >> >> Memory regions added by the current IGVM needs to be tracked so that they can be >> freed when a new IGVM is loaded. >> >> Reviewed-by: Ani Sinha <[email protected]> >> Signed-off-by: Gerd Hoffmann <[email protected]> >> --- >> backends/igvm-cfg.c | 1 + >> backends/igvm.c | 20 ++++++++++++-------- >> include/system/igvm-internal.h | 6 ++++++ >> 3 files changed, 19 insertions(+), 8 deletions(-) >> >> diff --git a/backends/igvm-cfg.c b/backends/igvm-cfg.c >> index e1f09855f6..38438a7b1e 100644 >> --- a/backends/igvm-cfg.c >> +++ b/backends/igvm-cfg.c >> @@ -65,6 +65,7 @@ static void igvm_complete(UserCreatable *uc, Error **errp) >> IgvmCfg *igvm = IGVM_CFG(uc); >> igvm->file = qigvm_file_init(igvm->filename, errp); >> + QTAILQ_INIT(&igvm->memory_regions); >> } >> OBJECT_DEFINE_TYPE_WITH_INTERFACES(IgvmCfg, igvm_cfg, IGVM_CFG, OBJECT, >> diff --git a/backends/igvm.c b/backends/igvm.c >> index 534032fed8..9e7c90d386 100644 >> --- a/backends/igvm.c >> +++ b/backends/igvm.c >> @@ -220,7 +220,7 @@ static void *qigvm_prepare_memory(QIgvm *ctx, uint64_t addr, uint64_t size, >> int region_identifier, Error **errp) >> { >> ERRP_GUARD(); >> - MemoryRegion *igvm_pages = NULL; >> + IgvmMemoryRegion *imr = NULL; >> Int128 gpa_region_size; >> MemoryRegionSection mrs = >> memory_region_find(get_system_memory(), addr, size); >> @@ -254,23 +254,27 @@ static void *qigvm_prepare_memory(QIgvm *ctx, uint64_t addr, uint64_t size, >> */ >> g_autofree char *region_name = >> g_strdup_printf("igvm.%X", region_identifier); >> - igvm_pages = g_new0(MemoryRegion, 1); >> + imr = g_new0(IgvmMemoryRegion, 1); >> + imr->mr = g_new0(MemoryRegion, 1); >> if (ctx->machine_state->cgs && >> ctx->machine_state->cgs->require_guest_memfd) { >> - if (!memory_region_init_ram_guest_memfd(igvm_pages, NULL, >> + if (!memory_region_init_ram_guest_memfd(imr->mr, NULL, > > > Please make sure to track them with owner set to OBJECT(ctx->machine_state). This will not work as the owner will have to be of TYPE_DEVICE not of TYPE_MACHINE. > Without owner, reference counting is disabled and we end up leaking memory regions on cleanup you introduce in patch 3 later. > > > Alex