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.
Signed-off-by: Peter Xu <[email protected]> --- include/system/memory.h | 3 ++- include/system/ramblock.h | 7 ++++++- accel/kvm/kvm-all.c | 2 +- system/memory.c | 2 +- system/physmem.c | 21 +++++++++++---------- 5 files changed, 21 insertions(+), 14 deletions(-) diff --git a/include/system/memory.h b/include/system/memory.h index 4428701a9f..0aca241360 100644 --- a/include/system/memory.h +++ b/include/system/memory.h @@ -1826,7 +1826,8 @@ bool memory_region_is_protected(MemoryRegion *mr); * memory_region_has_guest_memfd_private: check whether a memory region has * guest_memfd 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 320315f50c..5942e17f7e 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 15964160ee..d70968c966 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_private(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 25c800c9d3..d30fd690d1 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
