Commit bc20692f authored by Will Deacon's avatar Will Deacon Committed by Marc Zyngier
Browse files

KVM: arm64: Don't hold 'vm_table_lock' across guest page reclaim



Now that the teardown of a VM cannot be finalised as long as a reference
is held on the VM, rework __pkvm_reclaim_dying_guest_page() to hold a
reference to the dying VM rather than take the global 'vm_table_lock'
during the reclaim operation.

Signed-off-by: default avatarWill Deacon <will@kernel.org>
Link: https://patch.msgid.link/20260331155056.28220-4-will@kernel.org


Signed-off-by: default avatarMarc Zyngier <maz@kernel.org>
parent 24006968
Loading
Loading
Loading
Loading
+6 −5
Original line number Diff line number Diff line
@@ -918,15 +918,16 @@ teardown_donated_memory(struct kvm_hyp_memcache *mc, void *addr, size_t size)

int __pkvm_reclaim_dying_guest_page(pkvm_handle_t handle, u64 gfn)
{
	struct pkvm_hyp_vm *hyp_vm;
	struct pkvm_hyp_vm *hyp_vm = get_pkvm_hyp_vm(handle);
	int ret = -EINVAL;

	hyp_spin_lock(&vm_table_lock);
	hyp_vm = get_vm_by_handle(handle);
	if (hyp_vm && hyp_vm->kvm.arch.pkvm.is_dying)
	if (!hyp_vm)
		return ret;

	if (hyp_vm->kvm.arch.pkvm.is_dying)
		ret = __pkvm_host_reclaim_page_guest(gfn, hyp_vm);
	hyp_spin_unlock(&vm_table_lock);

	put_pkvm_hyp_vm(hyp_vm);
	return ret;
}