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;