On Mon, Dec 15, 2025 at 03:51:55PM -0500, Peter Xu wrote: > Rename the field to reflect the fact that the guest_memfd in this case only > backs private portion of the ramblock rather than all of it. > > Reviewed-by: Xiaoyao Li <[email protected]> > Signed-off-by: Peter Xu <[email protected]>
Reviewed-by: Michael Roth <[email protected]> > --- > include/system/memory.h | 7 ++++--- > include/system/ramblock.h | 7 ++++++- > accel/kvm/kvm-all.c | 2 +- > system/memory.c | 2 +- > system/physmem.c | 21 +++++++++++---------- > 5 files changed, 23 insertions(+), 16 deletions(-) > > diff --git a/include/system/memory.h b/include/system/memory.h > index 3bd5ffa5e0..2384575065 100644 > --- a/include/system/memory.h > +++ b/include/system/memory.h > @@ -1823,10 +1823,11 @@ static inline bool memory_region_is_romd(MemoryRegion > *mr) > bool memory_region_is_protected(MemoryRegion *mr); > > /** > - * memory_region_has_guest_memfd: check whether a memory region has > guest_memfd > - * associated > + * memory_region_has_guest_memfd: check whether a memory region has > + * guest_memfd_private associated > * > - * Returns %true if a memory region's ram_block has valid guest_memfd > assigned. > + * Returns %true if a memory region's ram_block has guest_memfd_private > + * assigned. > * > * @mr: the memory region being queried > */ > diff --git a/include/system/ramblock.h b/include/system/ramblock.h > index 76694fe1b5..9ecf7f970c 100644 > --- a/include/system/ramblock.h > +++ b/include/system/ramblock.h > @@ -40,7 +40,12 @@ struct RAMBlock { > Error *cpr_blocker; > int fd; > uint64_t fd_offset; > - int guest_memfd; > + /* > + * When RAM_GUEST_MEMFD_PRIVATE flag is set, this ramblock can have > + * private pages backed by guest_memfd_private specified, while shared > + * pages are backed by the ramblock on its own. > + */ > + int guest_memfd_private; > RamBlockAttributes *attributes; > size_t page_size; > /* dirty bitmap used during migration */ > diff --git a/accel/kvm/kvm-all.c b/accel/kvm/kvm-all.c > index c32fbcf9cc..1126b6f477 100644 > --- a/accel/kvm/kvm-all.c > +++ b/accel/kvm/kvm-all.c > @@ -1603,7 +1603,7 @@ static void kvm_set_phys_mem(KVMMemoryListener *kml, > mem->ram_start_offset = ram_start_offset; > mem->ram = ram; > mem->flags = kvm_mem_flags(mr); > - mem->guest_memfd = mr->ram_block->guest_memfd; > + mem->guest_memfd = mr->ram_block->guest_memfd_private; > mem->guest_memfd_offset = mem->guest_memfd >= 0 ? > (uint8_t*)ram - mr->ram_block->host : 0; > > diff --git a/system/memory.c b/system/memory.c > index 8b84661ae3..355b1fa26b 100644 > --- a/system/memory.c > +++ b/system/memory.c > @@ -1899,7 +1899,7 @@ bool memory_region_is_protected(MemoryRegion *mr) > > bool memory_region_has_guest_memfd(MemoryRegion *mr) > { > - return mr->ram_block && mr->ram_block->guest_memfd >= 0; > + return mr->ram_block && mr->ram_block->guest_memfd_private >= 0; > } > > uint8_t memory_region_get_dirty_log_mask(MemoryRegion *mr) > diff --git a/system/physmem.c b/system/physmem.c > index 3555d2f6f7..c3c7a81310 100644 > --- a/system/physmem.c > +++ b/system/physmem.c > @@ -2219,7 +2219,7 @@ static void ram_block_add(RAMBlock *new_block, Error > **errp) > goto out_free; > } > > - assert(new_block->guest_memfd < 0); > + assert(new_block->guest_memfd_private < 0); > > ret = ram_block_coordinated_discard_require(true); > if (ret < 0) { > @@ -2229,9 +2229,9 @@ static void ram_block_add(RAMBlock *new_block, Error > **errp) > goto out_free; > } > > - new_block->guest_memfd = > kvm_create_guest_memfd(new_block->max_length, > - 0, errp); > - if (new_block->guest_memfd < 0) { > + new_block->guest_memfd_private = > + kvm_create_guest_memfd(new_block->max_length, 0, errp); > + if (new_block->guest_memfd_private < 0) { > qemu_mutex_unlock_ramlist(); > goto out_free; > } > @@ -2248,7 +2248,7 @@ static void ram_block_add(RAMBlock *new_block, Error > **errp) > new_block->attributes = ram_block_attributes_create(new_block); > if (!new_block->attributes) { > error_setg(errp, "Failed to create ram block attribute"); > - close(new_block->guest_memfd); > + close(new_block->guest_memfd_private); > ram_block_coordinated_discard_require(false); > qemu_mutex_unlock_ramlist(); > goto out_free; > @@ -2385,7 +2385,7 @@ RAMBlock *qemu_ram_alloc_from_fd(ram_addr_t size, > ram_addr_t max_size, > new_block->max_length = max_size; > new_block->resized = resized; > new_block->flags = ram_flags; > - new_block->guest_memfd = -1; > + new_block->guest_memfd_private = -1; > new_block->host = file_ram_alloc(new_block, max_size, fd, > file_size < offset + max_size, > offset, errp); > @@ -2558,7 +2558,7 @@ RAMBlock *qemu_ram_alloc_internal(ram_addr_t size, > ram_addr_t max_size, > new_block->used_length = size; > new_block->max_length = max_size; > new_block->fd = -1; > - new_block->guest_memfd = -1; > + new_block->guest_memfd_private = -1; > new_block->page_size = qemu_real_host_page_size(); > new_block->host = host; > new_block->flags = ram_flags; > @@ -2609,9 +2609,9 @@ static void reclaim_ramblock(RAMBlock *block) > qemu_anon_ram_free(block->host, block->max_length); > } > > - if (block->guest_memfd >= 0) { > + if (block->guest_memfd_private >= 0) { > ram_block_attributes_destroy(block->attributes); > - close(block->guest_memfd); > + close(block->guest_memfd_private); > ram_block_coordinated_discard_require(false); > } > > @@ -4222,7 +4222,8 @@ int ram_block_discard_guest_memfd_range(RAMBlock *rb, > uint64_t offset, > > #ifdef CONFIG_FALLOCATE_PUNCH_HOLE > /* ignore fd_offset with guest_memfd */ > - ret = fallocate(rb->guest_memfd, FALLOC_FL_PUNCH_HOLE | > FALLOC_FL_KEEP_SIZE, > + ret = fallocate(rb->guest_memfd_private, > + FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, > offset, length); > > if (ret) { > -- > 2.50.1 > >
