[PATCH 00 of 36] x86/paravirt: groundwork for 64-bit Xen support

Jeremy Fitzhardinge
2008-06-25T04:44:48Z

Hi Ingo,

This series lays the groundwork for 64-bit Xen support. It follows
the usual pattern: a series of general cleanups and improvements,
followed by additions and modifications needed to slide Xen in.

Most of the 64-bit paravirt-ops work has already been done and
integrated for some time, so the changes are relatively minor.

Interesting and potentially hazardous changes in this series are:

"paravirt/x86_64: move __PAGE_OFFSET to leave a space for hypervisor"

This moves __PAGE_OFFSET up by 16 GDT slots, from 0xffff810000000000
to 0xffff880000000000. I have no general justification for this: the
specific reason is that Xen claims the first 16 kernel GDT slots for
itself, and we must move up the mapping to make room. In the process
I parameterised the compile-time construction of the initial
pagetables in head_64.S to cope with it.

"x86_64: adjust mapping of physical pagetables to work with Xen"
"x86_64: create small vmemmap mappings if PSE not available"

This rearranges the construction of the physical mapping so that it
works with Xen. This affects three aspects of the code:
1. It can't use pse, so it will only use pse if the processor
supports it.
2. It never replaces an existing mapping, so it can just extend the
early boot-provided mappings (either from head_64.S or the Xen domain
builder).
3. It makes sure that any page is iounmapped before attaching it to the
pagetable to avoid having writable aliases of pagetable pages.

The logical structure of the code is more or less unchanged, and still
works fine in the native case.

vmemmap mapping is likewise changed.

"x86_64: PSE no longer a hard requirement."

Because booting under Xen doesn't set PSE, it's no longer a hard
requirement for the kernel. PSE will be used whereever possible.

Overall diffstat:
arch/x86/Kconfig | 7 +
arch/x86/ia32/ia32entry.S | 37 +++--
arch/x86/kernel/aperture_64.c | 4
arch/x86/kernel/asm-offsets_32.c | 2
arch/x86/kernel/asm-offsets_64.c | 5
arch/x86/kernel/cpu/common_64.c | 3
arch/x86/kernel/e820.c | 2
arch/x86/kernel/early-quirks.c | 2
arch/x86/kernel/entry_32.S | 8 -
arch/x86/kernel/entry_64.S | 14 +-
arch/x86/kernel/head64.c | 5
arch/x86/kernel/head_64.S | 17 +-
arch/x86/kernel/machine_kexec_64.c | 2
arch/x86/kernel/paravirt.c | 24 +++
arch/x86/kernel/paravirt_patch_32.c | 4
arch/x86/kernel/paravirt_patch_64.c | 9 -
arch/x86/kernel/pci-calgary_64.c | 4
arch/x86/kernel/pci-dma.c | 4
arch/x86/kernel/pci-gart_64.c | 4
arch/x86/kernel/pci-swiotlb_64.c | 2
arch/x86/kernel/process_64.c | 50 +++++--
arch/x86/kernel/setup_64.c | 24 +--
arch/x86/kernel/vmi_32.c | 4
arch/x86/kernel/vsyscall_64.c | 12 -
arch/x86/mm/fault.c | 73 +++--------
arch/x86/mm/init_64.c | 234 +++++++++++++++++++++---------------
arch/x86/mm/ioremap.c | 7 -
arch/x86/mm/k8topology_64.c | 4
arch/x86/mm/numa_64.c | 4
arch/x86/mm/pgtable.c | 176 ++++++++++++++++-----------
arch/x86/mm/srat_64.c | 2
arch/x86/power/hibernate_64.c | 2
arch/x86/xen/enlighten.c | 9 +
include/asm-x86/cmpxchg_64.h | 37 +++++
include/asm-x86/desc_defs.h | 4
include/asm-x86/elf.h | 2
include/asm-x86/fixmap_64.h | 16 ++
include/asm-x86/io.h | 13 ++
include/asm-x86/io_32.h | 12 -
include/asm-x86/irqflags.h | 19 ++
include/asm-x86/mmu_context.h | 32 ++++
include/asm-x86/mmu_context_32.h | 28 ----
include/asm-x86/mmu_context_64.h | 18 --
include/asm-x86/msr.h | 5
include/asm-x86/page_64.h | 11 +
include/asm-x86/paravirt.h | 141 ++++++++++++++++++---
include/asm-x86/pgalloc.h | 4
include/asm-x86/pgtable.h | 20 +++
include/asm-x86/pgtable_32.h | 20 ---
include/asm-x86/pgtable_64.h | 8 -
include/asm-x86/processor.h | 2
include/asm-x86/required-features.h | 2
include/asm-x86/setup.h | 4
include/asm-x86/system.h | 7 -
54 files changed, 734 insertions(+), 431 deletions(-)

Thanks,
J