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
> 
> 

Reply via email to