diff --git a/1018-x86-Use-Linux-s-PAT.patch b/1018-x86-Use-Linux-s-PAT.patch new file mode 100644 index 0000000..d006dfc --- /dev/null +++ b/1018-x86-Use-Linux-s-PAT.patch @@ -0,0 +1,81 @@ +From 7f3f94f443f652e4a59c111d4cf8b5fb3b771612 Mon Sep 17 00:00:00 2001 +From: Demi Marie Obenour +Date: Sun, 4 Dec 2022 07:57:44 -0500 +Subject: [PATCH] x86: Use Linux's PAT + +This is purely for testing, to see if it works around a bug in i915. It +is not intended to be merged. + +NOT-signed-off-by: DO NOT MERGE +--- + xen/arch/x86/include/asm/page.h | 4 ++-- + xen/arch/x86/include/asm/processor.h | 10 +++++----- + xen/arch/x86/mm.c | 8 -------- + 3 files changed, 7 insertions(+), 15 deletions(-) + +diff --git a/xen/arch/x86/include/asm/page.h b/xen/arch/x86/include/asm/page.h +index 350d1fb1100f..2624cc6bdae5 100644 +--- a/xen/arch/x86/include/asm/page.h ++++ b/xen/arch/x86/include/asm/page.h +@@ -333,11 +333,11 @@ void efi_update_l4_pgtable(unsigned int l4idx, l4_pgentry_t l4e); + + /* Memory types, encoded under Xen's choice of MSR_PAT. */ + #define _PAGE_WB ( 0) +-#define _PAGE_WT ( _PAGE_PWT) ++#define _PAGE_WC ( _PAGE_PWT) + #define _PAGE_UCM ( _PAGE_PCD ) + #define _PAGE_UC ( _PAGE_PCD | _PAGE_PWT) +-#define _PAGE_WC (_PAGE_PAT ) + #define _PAGE_WP (_PAGE_PAT | _PAGE_PWT) ++#define _PAGE_WT (_PAGE_PAT | _PAGE_PCD | _PAGE_PWT) + + /* + * Debug option: Ensure that granted mappings are not implicitly unmapped. +diff --git a/xen/arch/x86/include/asm/processor.h b/xen/arch/x86/include/asm/processor.h +index c26ef9090c3a..ec881b880d4d 100644 +--- a/xen/arch/x86/include/asm/processor.h ++++ b/xen/arch/x86/include/asm/processor.h +@@ -65,16 +65,16 @@ + + /* + * Host IA32_CR_PAT value to cover all memory types. This is not the default +- * MSR_PAT value, and is an ABI with PV guests. ++ * MSR_PAT value, and is needed by the Linux i915 driver. + */ + #define XEN_MSR_PAT ((_AC(X86_MT_WB, ULL) << 0x00) | \ +- (_AC(X86_MT_WT, ULL) << 0x08) | \ ++ (_AC(X86_MT_WC, ULL) << 0x08) | \ + (_AC(X86_MT_UCM, ULL) << 0x10) | \ + (_AC(X86_MT_UC, ULL) << 0x18) | \ +- (_AC(X86_MT_WC, ULL) << 0x20) | \ ++ (_AC(X86_MT_WB, ULL) << 0x20) | \ + (_AC(X86_MT_WP, ULL) << 0x28) | \ +- (_AC(X86_MT_UC, ULL) << 0x30) | \ +- (_AC(X86_MT_UC, ULL) << 0x38)) ++ (_AC(X86_MT_UCM, ULL) << 0x30) | \ ++ (_AC(X86_MT_WT, ULL) << 0x38)) + + #ifndef __ASSEMBLY__ + +diff --git a/xen/arch/x86/mm.c b/xen/arch/x86/mm.c +index 702c76a879e5..b30453b9de11 100644 +--- a/xen/arch/x86/mm.c ++++ b/xen/arch/x86/mm.c +@@ -6365,14 +6365,6 @@ unsigned long get_upper_mfn_bound(void) + */ + static void __init __maybe_unused build_assertions(void) + { +- /* +- * If this trips, any guests that blindly rely on the public API in xen.h +- * (instead of reading the PAT from Xen, as Linux 3.19+ does) will be +- * broken. Furthermore, live migration of PV guests between Xen versions +- * using different PATs will not work. +- */ +- BUILD_BUG_ON(XEN_MSR_PAT != 0x050100070406ULL); +- + /* + * _PAGE_WB must be zero for several reasons, not least because Linux + * assumes it. +-- +2.44.0 + diff --git a/xen.spec.in b/xen.spec.in index f01b750..593da60 100644 --- a/xen.spec.in +++ b/xen.spec.in @@ -162,6 +162,7 @@ Patch1014: 1014-libxl-conditionally-allow-PCI-passthrough-on-PV-with.patch Patch1015: 1015-gnttab-disable-grant-tables-v2-by-default.patch Patch1016: 1016-cpufreq-enable-HWP-by-default.patch Patch1017: 1017-Fix-IGD-passthrough-with-linux-stubdomain.patch +Patch1018: 1018-x86-Use-Linux-s-PAT.patch # Reproducible builds Patch1100: 1100-Define-build-dates-time-based-on-SOURCE_DATE_EPOCH.patch