]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
KVM: SEV: Move sev_free_vcpu() down below sev_es_unmap_ghcb()
authorSean Christopherson <seanjc@google.com>
Fri, 29 May 2026 18:35:40 +0000 (20:35 +0200)
committerPaolo Bonzini <pbonzini@redhat.com>
Wed, 3 Jun 2026 14:43:56 +0000 (16:43 +0200)
Relocate sev_free_vcpu() down in sev.c so that it's definition comes after
sev_es_unmap_ghcb().  This will allow sharing unmap functionality between
the two functions without needing a forward declaration (or weird placement
of the common code).

No functional change intended.

Cc: stable@vger.kernel.org
Reviewed-by: Tom Lendacky <thomas.lendacky@amd.com>
Reviewed-by: Michael Roth <michael.roth@amd.com>
Signed-off-by: Sean Christopherson <seanjc@google.com>
Message-ID: <20260501202250.2115252-16-seanjc@google.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Message-ID: <20260529183549.1104619-16-pbonzini@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
arch/x86/kvm/svm/sev.c

index 4ebe0d449789883e28b85806dda6bb102dd8e7da..437282f0ea9438fceeccb754239c2b3419fd9818 100644 (file)
@@ -3313,37 +3313,6 @@ void sev_guest_memory_reclaimed(struct kvm *kvm)
        sev_writeback_caches(kvm);
 }
 
-void sev_free_vcpu(struct kvm_vcpu *vcpu)
-{
-       struct vcpu_svm *svm;
-
-       if (!is_sev_es_guest(vcpu))
-               return;
-
-       svm = to_svm(vcpu);
-
-       /*
-        * If it's an SNP guest, then the VMSA was marked in the RMP table as
-        * a guest-owned page. Transition the page to hypervisor state before
-        * releasing it back to the system.
-        */
-       if (is_sev_snp_guest(vcpu)) {
-               u64 pfn = __pa(svm->sev_es.vmsa) >> PAGE_SHIFT;
-
-               if (kvm_rmp_make_shared(vcpu->kvm, pfn, PG_LEVEL_4K))
-                       goto skip_vmsa_free;
-       }
-
-       if (vcpu->arch.guest_state_protected)
-               sev_flush_encrypted_page(vcpu, svm->sev_es.vmsa);
-
-       __free_page(virt_to_page(svm->sev_es.vmsa));
-
-skip_vmsa_free:
-       if (svm->sev_es.ghcb_sa_free)
-               kvfree(svm->sev_es.ghcb_sa);
-}
-
 static void dump_ghcb(struct vcpu_svm *svm)
 {
        struct vmcb_control_area *control = &svm->vmcb->control;
@@ -3618,6 +3587,37 @@ void sev_es_unmap_ghcb(struct vcpu_svm *svm)
        svm->sev_es.ghcb = NULL;
 }
 
+void sev_free_vcpu(struct kvm_vcpu *vcpu)
+{
+       struct vcpu_svm *svm;
+
+       if (!is_sev_es_guest(vcpu))
+               return;
+
+       svm = to_svm(vcpu);
+
+       /*
+        * If it's an SNP guest, then the VMSA was marked in the RMP table as
+        * a guest-owned page. Transition the page to hypervisor state before
+        * releasing it back to the system.
+        */
+       if (is_sev_snp_guest(vcpu)) {
+               u64 pfn = __pa(svm->sev_es.vmsa) >> PAGE_SHIFT;
+
+               if (kvm_rmp_make_shared(vcpu->kvm, pfn, PG_LEVEL_4K))
+                       goto skip_vmsa_free;
+       }
+
+       if (vcpu->arch.guest_state_protected)
+               sev_flush_encrypted_page(vcpu, svm->sev_es.vmsa);
+
+       __free_page(virt_to_page(svm->sev_es.vmsa));
+
+skip_vmsa_free:
+       if (svm->sev_es.ghcb_sa_free)
+               kvfree(svm->sev_es.ghcb_sa);
+}
+
 int pre_sev_run(struct vcpu_svm *svm, int cpu)
 {
        struct svm_cpu_data *sd = per_cpu_ptr(&svm_data, cpu);