Commit 32e200bd authored by Fuad Tabba's avatar Fuad Tabba Committed by Paolo Bonzini
Browse files

KVM: arm64: Enable support for guest_memfd backed memory



Now that the infrastructure is in place, enable guest_memfd for arm64.

* Select CONFIG_KVM_GUEST_MEMFD in KVM/arm64 Kconfig.

* Enforce KVM_MEMSLOT_GMEM_ONLY for guest_memfd on arm64: Ensure that
  guest_memfd-backed memory slots on arm64 are only supported if they
  are intended for shared memory use cases (i.e.,
  kvm_memslot_is_gmem_only() is true). This design reflects the current
  arm64 KVM ecosystem where guest_memfd is primarily being introduced
  for VMs that support shared memory.

Reviewed-by: default avatarJames Houghton <jthoughton@google.com>
Reviewed-by: default avatarGavin Shan <gshan@redhat.com>
Reviewed-by: default avatarMarc Zyngier <maz@kernel.org>
Acked-by: default avatarDavid Hildenbrand <david@redhat.com>
Signed-off-by: default avatarFuad Tabba <tabba@google.com>
Signed-off-by: default avatarSean Christopherson <seanjc@google.com>
Message-ID: <20250729225455.670324-21-seanjc@google.com>
Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
parent f4e74030
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -37,6 +37,7 @@ menuconfig KVM
	select HAVE_KVM_VCPU_RUN_PID_CHANGE
	select SCHED_INFO
	select GUEST_PERF_EVENTS if PERF_EVENTS
	select KVM_GUEST_MEMFD
	help
	  Support hosting virtualized guest machines.

+7 −0
Original line number Diff line number Diff line
@@ -2302,6 +2302,13 @@ int kvm_arch_prepare_memory_region(struct kvm *kvm,
	if ((new->base_gfn + new->npages) > (kvm_phys_size(&kvm->arch.mmu) >> PAGE_SHIFT))
		return -EFAULT;

	/*
	 * Only support guest_memfd backed memslots with mappable memory, since
	 * there aren't any CoCo VMs that support only private memory on arm64.
	 */
	if (kvm_slot_has_gmem(new) && !kvm_memslot_is_gmem_only(new))
		return -EINVAL;

	hva = new->userspace_addr;
	reg_end = hva + (new->npages << PAGE_SHIFT);