On 6/27/2026 3:06 AM, Sean Christopherson wrote:
On Fri, Jun 26, 2026, Yan Zhao wrote:
My first impression of gmem_in_place_conversion=true was that it enforces gmem
in-place conversion. However, it actually only enforces per-gmem private/shared
attribute.
My worry was that people might think it's a kernel bug if userspace can still
have shared memory from other sources after they configured
gmem_in_place_conversion=true.
Ah, I see where you're coming from.  FWIW, truly enforcing in-place conversion
is flat out impossible.  E.g. userspace can simply replace the memslot, at which
point the memory effectively reverts to shared.

would something like below enforce the in-place conversion?

Userspace can create a memslot without gmem fd, but that memslot can only serve as shared memory and cannot be converted. So it doesn't violate the in-place conversion.

--- a/virt/kvm/kvm_main.c
+++ b/virt/kvm/kvm_main.c
@@ -2122,6 +2122,8 @@ static int kvm_set_memory_region(struct kvm *kvm,
        new->flags = mem->flags;
        new->userspace_addr = mem->userspace_addr;
        if (mem->flags & KVM_MEM_GUEST_MEMFD) {
+               if (gmem_in_place_conversion)
+                       new->flags |= KVM_MEMSLOT_GMEM_ONLY;
r = kvm_gmem_bind(kvm, new, mem->guest_memfd, mem->guest_memfd_offset);
                if (r)
                        goto out;

Reply via email to