]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
x86/kvm: Override default caching mode for SEV-SNP and TDX
authorKirill A. Shutemov <kirill.shutemov@linux.intel.com>
Tue, 15 Oct 2024 09:58:17 +0000 (12:58 +0300)
committerPaolo Bonzini <pbonzini@redhat.com>
Sun, 20 Oct 2024 11:07:02 +0000 (07:07 -0400)
AMD SEV-SNP and Intel TDX have limited access to MTRR: either it is not
advertised in CPUID or it cannot be programmed (on TDX, due to #VE on
CR0.CD clear).

This results in guests using uncached mappings where it shouldn't and
pmd/pud_set_huge() failures due to non-uniform memory type reported by
mtrr_type_lookup().

Override MTRR state, making it WB by default as the kernel does for
Hyper-V guests.

Signed-off-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
Suggested-by: Binbin Wu <binbin.wu@intel.com>
Cc: Juergen Gross <jgross@suse.com>
Cc: Tom Lendacky <thomas.lendacky@amd.com>
Reviewed-by: Juergen Gross <jgross@suse.com>
Message-ID: <20241015095818.357915-1-kirill.shutemov@linux.intel.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
arch/x86/kernel/kvm.c

index 263f8aed4e2cf8b84575d21e4b4358b2924915b5..21e9e4845354159cf289eb765a63e80e69a12e25 100644 (file)
@@ -37,6 +37,7 @@
 #include <asm/apic.h>
 #include <asm/apicdef.h>
 #include <asm/hypervisor.h>
+#include <asm/mtrr.h>
 #include <asm/tlb.h>
 #include <asm/cpuidle_haltpoll.h>
 #include <asm/ptrace.h>
@@ -980,6 +981,9 @@ static void __init kvm_init_platform(void)
        }
        kvmclock_init();
        x86_platform.apic_post_init = kvm_apic_init;
+
+       /* Set WB as the default cache mode for SEV-SNP and TDX */
+       mtrr_overwrite_state(NULL, 0, MTRR_TYPE_WRBACK);
 }
 
 #if defined(CONFIG_AMD_MEM_ENCRYPT)