From: Ani Sinha Date: Wed, 25 Feb 2026 03:49:09 +0000 (+0530) Subject: system/physmem: add helper to reattach existing memory after KVM VM fd change X-Git-Tag: v11.0.0-rc0~43^2~57 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=df8df3cb6b743372ebb335bd8404bc3d748da350;p=thirdparty%2Fqemu.git system/physmem: add helper to reattach existing memory after KVM VM fd change After the guest KVM file descriptor has changed as a part of the process of confidential guest reset mechanism, existing memory needs to be reattached to the new file descriptor. This change adds a helper function ram_block_rebind() for this purpose. The next patch will make use of this function. Signed-off-by: Ani Sinha Link: https://lore.kernel.org/r/20260225035000.385950-5-anisinha@redhat.com Signed-off-by: Paolo Bonzini --- diff --git a/include/system/physmem.h b/include/system/physmem.h index 7bb7d3e1545..da91b77bd9b 100644 --- a/include/system/physmem.h +++ b/include/system/physmem.h @@ -51,5 +51,6 @@ physical_memory_snapshot_and_clear_dirty(MemoryRegion *mr, hwaddr offset, bool physical_memory_snapshot_get_dirty(DirtyBitmapSnapshot *snap, ram_addr_t start, ram_addr_t length); +int ram_block_rebind(Error **errp); #endif diff --git a/system/physmem.c b/system/physmem.c index 2fb0c25c93b..e5ff26acecd 100644 --- a/system/physmem.c +++ b/system/physmem.c @@ -2826,6 +2826,34 @@ found: return block; } +/* + * Creates new guest memfd for the ramblocks and closes the + * existing memfd. + */ +int ram_block_rebind(Error **errp) +{ + RAMBlock *block; + + qemu_mutex_lock_ramlist(); + + RAMBLOCK_FOREACH(block) { + if (block->flags & RAM_GUEST_MEMFD) { + if (block->guest_memfd >= 0) { + close(block->guest_memfd); + } + block->guest_memfd = kvm_create_guest_memfd(block->max_length, + 0, errp); + if (block->guest_memfd < 0) { + qemu_mutex_unlock_ramlist(); + return -1; + } + + } + } + qemu_mutex_unlock_ramlist(); + return 0; +} + /* * Finds the named RAMBlock *