From: Will Deacon Date: Tue, 31 Mar 2026 15:50:54 +0000 (+0100) Subject: KVM: arm64: Allow get_pkvm_hyp_vm() to take a reference to a dying VM X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=2400696883870ec3fb0fb9925426c62a3383ca36;p=thirdparty%2Fkernel%2Flinux.git KVM: arm64: Allow get_pkvm_hyp_vm() to take a reference to a dying VM Now that completion of the teardown path requires a refcount of zero for the target VM, we can allow get_pkvm_hyp_vm() to take a reference on a dying VM, which is necessary to unshare pages with a non-protected VM during the teardown process itself. Note that vCPUs belonging to a dying VM cannot be loaded and pages can only be reclaimed from a protected VM (via __pkvm_reclaim_dying_guest_page()) if the target VM is in the dying state. Signed-off-by: Will Deacon Link: https://patch.msgid.link/20260331155056.28220-3-will@kernel.org Signed-off-by: Marc Zyngier --- diff --git a/arch/arm64/kvm/hyp/nvhe/pkvm.c b/arch/arm64/kvm/hyp/nvhe/pkvm.c index 3fd3b930beeb..b955da0e50bc 100644 --- a/arch/arm64/kvm/hyp/nvhe/pkvm.c +++ b/arch/arm64/kvm/hyp/nvhe/pkvm.c @@ -309,14 +309,8 @@ struct pkvm_hyp_vm *get_pkvm_hyp_vm(pkvm_handle_t handle) hyp_spin_lock(&vm_table_lock); hyp_vm = get_vm_by_handle(handle); - if (!hyp_vm) - goto unlock; - - if (hyp_vm->kvm.arch.pkvm.is_dying) - hyp_vm = NULL; - else + if (hyp_vm) hyp_page_ref_inc(hyp_virt_to_page(hyp_vm)); -unlock: hyp_spin_unlock(&vm_table_lock); return hyp_vm;