[PATCH v11 6/6] KVM: SEV: Perform RMP optimizations on SNP guest shutdown
Ashish Kalra <[email protected]> Mon, 27 Jul 2026 19:06:22 +0000
| Newsgroups | org.kernel.vger.linux-crypto,dev.linux.lists.linux-coco,org.kernel.vger.kvm,org.kernel.vger.linux-kernel |
|---|---|
| Message-ID | <5ee307f82cc9c30c32616e184f912451e6c61d75.1784844080.git.ashish.kalra@amd.com> |
From: Ashish Kalra <[email protected]> Pages are converted from shared to private as SNP guests are launched. This destroys exisiting RMPOPT optimizations in the regions where pages are converted. Conversely, guest pages are converted back to shared during SNP guest termination and their region may become eligible for RMPOPT optimization. To take advantage of this, perform RMPOPT after guest termination. Do it after a delay so that a single RMPOPT pass can be done if multiple guests terminate in a short period of time. Acked-by: Dave Hansen <[email protected]> Reviewed-by: Ackerley Tng <[email protected]> Signed-off-by: Ashish Kalra <[email protected]> --- arch/x86/kvm/svm/sev.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/arch/x86/kvm/svm/sev.c b/arch/x86/kvm/svm/sev.c index 427229347876..c574849b1587 100644 --- a/arch/x86/kvm/svm/sev.c +++ b/arch/x86/kvm/svm/sev.c @@ -2992,6 +2992,16 @@ void sev_vm_destroy(struct kvm *kvm) */ if (snp_decommission_context(kvm)) return; + + /* + * Perform RMP optimizations on memory freed by terminating + * guests. The scan is deferred, so it normally runs after + * sev_gmem_invalidate() has converted this guest's pages back to + * shared, and picks them up then. A very large guest whose + * conversion has not finished by then is picked up by a later + * teardown's scan. + */ + snp_rmpopt_all_physmem(); } else { sev_unbind_asid(kvm, sev->handle); } -- 2.43.0