Hi Ackerley, On Thu, 6 Mar 2025 at 22:46, Ackerley Tng <ackerleytng@xxxxxxxxxx> wrote: > > Fuad Tabba <tabba@xxxxxxxxxx> writes: > > > Add support for mmap() and fault() for guest_memfd backed memory > > in the host for VMs that support in-place conversion between > > shared and private. To that end, this patch adds the ability to > > check whether the VM type supports in-place conversion, and only > > allows mapping its memory if that's the case. > > > > Also add the KVM capability KVM_CAP_GMEM_SHARED_MEM, which > > indicates that the VM supports shared memory in guest_memfd, or > > that the host can create VMs that support shared memory. > > Supporting shared memory implies that memory can be mapped when > > shared with the host. > > > > This is controlled by the KVM_GMEM_SHARED_MEM configuration > > option. > > > > Signed-off-by: Fuad Tabba <tabba@xxxxxxxxxx> > > --- > > include/linux/kvm_host.h | 11 ++++ > > include/uapi/linux/kvm.h | 1 + > > virt/kvm/guest_memfd.c | 105 +++++++++++++++++++++++++++++++++++++++ > > virt/kvm/kvm_main.c | 4 ++ > > 4 files changed, 121 insertions(+) > > > > diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h > > index 7788e3625f6d..2d025b8ee20e 100644 > > --- a/include/linux/kvm_host.h > > +++ b/include/linux/kvm_host.h > > @@ -728,6 +728,17 @@ static inline bool kvm_arch_has_private_mem(struct kvm *kvm) > > } > > #endif > > > > +/* > > + * Arch code must define kvm_arch_gmem_supports_shared_mem if support for > > + * private memory is enabled and it supports in-place shared/private conversion. > > + */ > > +#if !defined(kvm_arch_gmem_supports_shared_mem) && !IS_ENABLED(CONFIG_KVM_PRIVATE_MEM) > > Is this a copypasta error? I'm wondering if this should be > !IS_ENABLED(CONFIG_KVM_GMEM_SHARED_MEM). Yes. Kirill had pointed that out as well. I will fix it. > Also, would you consider defining a __weak function to be overridden by > different architectures, or would weak symbols not be inline-able? I have no strong opinion, but I think that it should follow the same pattern as kvm_arch_has_private_mem(). Cheers, /fuad > > +static inline bool kvm_arch_gmem_supports_shared_mem(struct kvm *kvm) > > +{ > > + return false; > > +} > > +#endif > > + > > > > <snip>