mirror of
https://github.com/torvalds/linux.git
synced 2026-05-30 10:04:04 +02:00
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: Will Deacon <will@kernel.org> Link: https://patch.msgid.link/20260331155056.28220-4-will@kernel.org Signed-off-by: Marc Zyngier <maz@kernel.org>
This commit is contained in:
parent
2400696883
commit
bc20692f52
|
|
@ -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)
|
||||
ret = __pkvm_host_reclaim_page_guest(gfn, hyp_vm);
|
||||
hyp_spin_unlock(&vm_table_lock);
|
||||
if (!hyp_vm)
|
||||
return ret;
|
||||
|
||||
if (hyp_vm->kvm.arch.pkvm.is_dying)
|
||||
ret = __pkvm_host_reclaim_page_guest(gfn, hyp_vm);
|
||||
|
||||
put_pkvm_hyp_vm(hyp_vm);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user