From: Juergen Gross <jgross@xxxxxxxx> Sent: Wednesday, February 8, 2023 11:22 PM > > In order to avoid mappings using the UC- cache attribute, set the > MTRR state to use WB caching as the default. > > This is needed in order to cope with the fact that PAT is enabled, > while MTRRs are disabled by the hypervisor. > > Fixes: 90b926e68f50 ("x86/pat: Fix pat_x_mtrr_type() for MTRR disabled case") > Signed-off-by: Juergen Gross <jgross@xxxxxxxx> > --- > V2: > - new patch > --- > arch/x86/kernel/cpu/mshyperv.c | 8 ++++++++ > 1 file changed, 8 insertions(+) > > diff --git a/arch/x86/kernel/cpu/mshyperv.c b/arch/x86/kernel/cpu/mshyperv.c > index 46668e255421..51e47dc0e987 100644 > --- a/arch/x86/kernel/cpu/mshyperv.c > +++ b/arch/x86/kernel/cpu/mshyperv.c > @@ -34,6 +34,7 @@ > #include <clocksource/hyperv_timer.h> > #include <asm/numa.h> > #include <asm/coco.h> > +#include <asm/mtrr.h> > > /* Is Linux running as the root partition? */ > bool hv_root_partition; > @@ -335,6 +336,13 @@ static void __init ms_hyperv_init_platform(void) > static_branch_enable(&isolation_type_snp); > #ifdef CONFIG_SWIOTLB > swiotlb_unencrypted_base = ms_hyperv.shared_gpa_boundary; > +#endif Unfortunately, Hyper-V does not filter out the MTRR flag from the CPUID leaf, so this code also needs setup_clear_cpu_cap(X86_FEATURE_MTRR); before calling mtrr_overwrite_state(). I've got a bug filed for the Hyper-V team to fix the flag, but clearing the feature here solves the problem regardless. > +#ifdef CONFIG_MTRR Hopefully this #ifdef can go away, per my comment in Patch 2 of the series. Michael > + /* > + * Set WB as the default cache mode in case MTRRs are > + * disabled by the hypervisor. > + */ > + mtrr_overwrite_state(NULL, 0, NULL, MTRR_TYPE_WRBACK); > #endif > } > /* Isolation VMs are unenlightened SEV-based VMs, thus this check: */ > -- > 2.35.3