While working on Qubes OS Marek found out that there were some PAT hacks
in the Linux i195 driver. I decided to make Xen use Linux’s PAT to see
if it solved the graphics glitches that were observed; it did. This
required a substantial amount of preliminary work that is useful even
without using Linux’s PAT. Furthermore, it turned out that the graphics
glitches were due to a hardware bug, which means that Xen's PAT is
fundamentally incompatible with the use of current-generation Intel
integrated GPUs assigned to a PV guest (including dom0).
Patches 1 through 3 are the preliminary work. Patch 3 does break ABI by
rejecting the unused PAT entries, but this will only impact buggy PV
guests and can be disabled with a Xen command-line option. Patch 4
provides a new Kconfig option (CONFIG_LINUX_PAT) to use Linux's PAT
instead of Xen's default.
Only patches 3 and 4 actually change Xen’s observable behavior. Patch 1
is strictly cleanup. Patch 2 makes changing the PAT much less
error-prone, as problems with the PAT or with the associated _PAGE_*
constants will be detected at compile time.
Demi Marie Obenour (4):
x86: Remove MEMORY_NUM_TYPES and NO_HARDCODE_MEM_TYPE
x86/mm: Reject invalid cacheability in PV guests by default
x86/mm: make code robust to future PAT changes
x86: Allow using Linux's PAT
docs/misc/xen-command-line.pandoc | 11 ++
xen/arch/x86/Kconfig | 33 ++++++
xen/arch/x86/hvm/mtrr.c | 18 ++--
xen/arch/x86/include/asm/mtrr.h | 2 -
xen/arch/x86/include/asm/page.h | 14 +++
xen/arch/x86/include/asm/processor.h | 15 +++
xen/arch/x86/include/asm/pv/domain.h | 7 ++
xen/arch/x86/mm.c | 151 ++++++++++++++++++++++++++-
xen/arch/x86/mm/shadow/multi.c | 2 +-
xen/arch/x86/pv/domain.c | 18 +++-
10 files changed, 255 insertions(+), 16 deletions(-)
--
Sincerely,
Demi Marie Obenour (she/her/hers)
Invisible Things Lab