Ackerley Tng via B4 Relay <[email protected]>
writes:
>
> [...snip...]
>
> @@ -1078,13 +1077,17 @@ void vm_mem_add(struct kvm_vm *vm, enum
> vm_mem_backing_src_type src_type,
> }
>
> region->fd = -1;
> - if (backing_src_is_shared(src_type))
> + if (flags & KVM_MEM_GUEST_MEMFD && gmem_flags & GUEST_MEMFD_FLAG_MMAP) {
> + region->fd = kvm_dup(gmem_fd);
> + mmap_offset = gmem_offset;
> + } else if (backing_src_is_shared(src_type)) {
> region->fd = kvm_memfd_alloc(region->mmap_size,
> src_type ==
> VM_MEM_SRC_SHARED_HUGETLB);
> + }
>
> - region->mmap_start = kvm_mmap(region->mmap_size, PROT_READ | PROT_WRITE,
> - vm_mem_backing_src_alias(src_type)->flag,
> - region->fd);
> + region->mmap_start = __kvm_mmap(region->mmap_size, PROT_READ |
> PROT_WRITE,
> +
> vm_mem_backing_src_alias(src_type)->flag,
> + region->fd, mmap_offset);
Sashiko pointed out these:
1. When mmap() is done for region->mmap_alias, it doesn't use
mmap_offset. I'll fix that in the next revision.
2. mmap() may map past the end of the guest_memfd if, due to alignment,
the mmap_size is increased. That is true, but I feel that that fix
should go with a bigger clean up for vm_mem_add().
3. vm_mem_backing_src_alias(src_type)->flag may contain incompatible
mmap flags. This is true. For now, when guest_memfd is used with
vm_mem_add, the src_type passed has to be VM_MEM_SRC_SHMEM. I think
this also falls in the category of doing a bigger clean up for
vm_mem_add().
>
> [...snip...]
>