mirror of
https://github.com/torvalds/linux.git
synced 2026-07-28 10:09:10 +02:00
KVM: SEV: Move sev_free_vcpu() down below sev_es_unmap_ghcb()
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>
This commit is contained in:
parent
8618004d3e
commit
08385c5e18
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user