Commit d45829b3 authored by Mingwei Zhang's avatar Mingwei Zhang Committed by Paolo Bonzini

KVM: SVM: Flush when freeing encrypted pages even on SME_COHERENT CPUs

Use clflush_cache_range() to flush the confidential memory when
SME_COHERENT is supported in AMD CPU. Cache flush is still needed since
SME_COHERENT only support cache invalidation at CPU side. All confidential
cache lines are still incoherent with DMA devices.

Cc: stable@vger.kerel.org

Fixes: add5e2f0 ("KVM: SVM: Add support for the SEV-ES VMSA")
Reviewed-by: default avatarSean Christopherson <seanjc@google.com>
Signed-off-by: default avatarMingwei Zhang <mizhang@google.com>
Message-Id: <20220421031407.2516575-3-mizhang@google.com>
Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
parent 4bbef7e8
...@@ -2239,11 +2239,14 @@ static void sev_flush_encrypted_page(struct kvm_vcpu *vcpu, void *va) ...@@ -2239,11 +2239,14 @@ static void sev_flush_encrypted_page(struct kvm_vcpu *vcpu, void *va)
unsigned long addr = (unsigned long)va; unsigned long addr = (unsigned long)va;
/* /*
* If hardware enforced cache coherency for encrypted mappings of the * If CPU enforced cache coherency for encrypted mappings of the
* same physical page is supported, nothing to do. * same physical page is supported, use CLFLUSHOPT instead. NOTE: cache
* flush is still needed in order to work properly with DMA devices.
*/ */
if (boot_cpu_has(X86_FEATURE_SME_COHERENT)) if (boot_cpu_has(X86_FEATURE_SME_COHERENT)) {
clflush_cache_range(va, PAGE_SIZE);
return; return;
}
/* /*
* VM Page Flush takes a host virtual address and a guest ASID. Fall * VM Page Flush takes a host virtual address and a guest ASID. Fall
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment