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

Reply via email to