]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
KVM: arm64: Allow get_pkvm_hyp_vm() to take a reference to a dying VM
authorWill Deacon <will@kernel.org>
Tue, 31 Mar 2026 15:50:54 +0000 (16:50 +0100)
committerMarc Zyngier <maz@kernel.org>
Wed, 1 Apr 2026 13:29:06 +0000 (14:29 +0100)
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 <will@kernel.org>
Link: https://patch.msgid.link/20260331155056.28220-3-will@kernel.org
Signed-off-by: Marc Zyngier <maz@kernel.org>
arch/arm64/kvm/hyp/nvhe/pkvm.c

index 3fd3b930beeb81c6fb0992fa619d03f94b537cfa..b955da0e50bc36079669709d7844db47bd44fd2c 100644 (file)
@@ -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;