如何在 KVM 的内存中固定访客页面?

How to pin a guest page in memory in KVM?

我正在 KVM 内存中做一些事情。我注意到有时会调用 kvm_mmu_notifier_invalidate_range_start(),然后调用 kvm_unmap_hva_range(),然后调用 drop_stpe(),这会将某个 spte 设置为零。我猜 QEMU 中从 HVA 到 PFN 的映射发生了变化,所以它需要使指向那些 PFN 的那些 sptes 无效,对吗?
我对 spte 做了一些 CoW 机制,所以 drop_spte() 让它很难工作。我可以将一个页面固定在内存中,这样从它的 HVA 到 PFN 的映射就不​​会改变吗?我想在 CoW 来宾页面时固定一个页面,这样它就不会被意外删除。
非常感谢!

我想 kvm_get_pfn() 可以用来固定 pfn。可以使用gfn_to_pfn()得到gfn对应的pfn。要取消固定页面,您可以使用 kvm_release_pfn_clean().