Re: [RFC PATCH v4 07/14] KVM: guest_memfd: Allow host to mmap guest_memfd() pages when shared

Alexey Kardashevskiy
2024-12-27T04:21:41Z

On 14/12/24 03:48, Fuad Tabba wrote:
> Add support for mmap() and fault() for guest_memfd in the host.
> The ability to fault in a guest page is contingent on that page
> being shared with the host.
>
> The guest_memfd PRIVATE memory attribute is not used for two
> reasons. First because it reflects the userspace expectation for
> that memory location, and therefore can be toggled by userspace.
> The second is, although each guest_memfd file has a 1:1 binding
> with a KVM instance, the plan is to allow multiple files per
> inode, e.g. to allow intra-host migration to a new KVM instance,
> without destroying guest_memfd.
>
> The mapping is restricted to only memory explicitly shared with
> the host. KVM checks that the host doesn't have any mappings for
> private memory via the folio's refcount. To avoid races between
> paths that check mappability and paths that check whether the
> host has any mappings (via the refcount), the folio lock is held
> in while either check is being performed.
>
> This new feature is gated with a new configuration option,
> CONFIG_KVM_GMEM_MAPPABLE.
>
> Co-developed-by: Ackerley Tng <ackerleytng@google.com>
> Signed-off-by: Ackerley Tng <ackerleytng@google.com>
> Co-developed-by: Elliot Berman <quic_eberman@quicinc.com>
> Signed-off-by: Elliot Berman <quic_eberman@quicinc.com>
> Signed-off-by: Fuad Tabba <tabba@google.com>
>
> ---
> The functions kvm_gmem_is_mapped(), kvm_gmem_set_mappable(), and
> int kvm_gmem_clear_mappable() are not used in this patch series.
> They are intended to be used in future patches [*], which check
> and toggle mapability when the guest shares/unshares pages with
> the host.
>
> [*] https://android-kvm.googlesource.com/linux/+/refs/heads/tabba/guestmem-6.13-v4-pkvm

This one requires access, can you please push it somewhere public? I am
interested in in-place shared<->private memory conversion and I wonder
if kvm_gmem_set_mappable() that guy. Thanks,

--
Alexey