KVM: SVM: Flush when freeing encrypted pages even on SME_COHERENT CPUs
commitd45829b351
upstream. 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:add5e2f045
("KVM: SVM: Add support for the SEV-ES VMSA") Reviewed-by: Sean Christopherson <seanjc@google.com> Signed-off-by: Mingwei Zhang <mizhang@google.com> Message-Id: <20220421031407.2516575-3-mizhang@google.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
Родитель
8b2da96904
Коммит
4bbd693d9f
|
@ -1990,11 +1990,14 @@ static void sev_flush_guest_memory(struct vcpu_svm *svm, void *va,
|
|||
unsigned long len)
|
||||
{
|
||||
/*
|
||||
* If hardware enforced cache coherency for encrypted mappings of the
|
||||
* same physical page is supported, nothing to do.
|
||||
* If CPU enforced cache coherency for encrypted mappings of the
|
||||
* 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;
|
||||
}
|
||||
|
||||
/*
|
||||
* If the VM Page Flush MSR is supported, use it to flush the page
|
||||
|
|
Загрузка…
Ссылка в новой задаче