From 84d54d5d8b3155ff68be6f683f43d25d4dc9c5a8 Mon Sep 17 00:00:00 2001 From: Keir Fraser Date: Thu, 8 May 2008 14:32:11 +0100 Subject: i386: Remove non-PAE hypervisor build target. Signed-off-by: Keir Fraser --- Config.mk | 4 - Makefile | 4 - buildconfigs/mk.linux-2.6-common | 4 - buildconfigs/mk.linux-2.6.5-SLES-xen | 2 - buildconfigs/mk.linux-2.6.9-RHEL-xen | 2 - extras/mini-os/Config.mk | 8 -- extras/mini-os/arch/x86/arch.mk | 5 -- extras/mini-os/arch/x86/mm.c | 15 ---- extras/mini-os/arch/x86/setup.c | 2 +- extras/mini-os/arch/x86/traps.c | 5 +- extras/mini-os/arch/x86/x86_32.S | 4 - extras/mini-os/include/types.h | 6 +- extras/mini-os/include/x86/arch_limits.h | 2 +- extras/mini-os/include/x86/arch_mm.h | 30 +------ .../mini-os/include/x86/x86_32/hypercall-x86_32.h | 12 +-- xen/arch/x86/Rules.mk | 5 -- xen/arch/x86/boot/head.S | 22 +----- xen/arch/x86/boot/trampoline.S | 6 -- xen/arch/x86/boot/wakeup.S | 6 -- xen/arch/x86/boot/x86_32.S | 2 - xen/arch/x86/domain_build.c | 6 +- xen/arch/x86/hvm/vmx/vmcs.c | 2 +- xen/arch/x86/hvm/vmx/vmx.c | 4 +- xen/arch/x86/mm.c | 41 +++------- xen/arch/x86/mm/hap/hap.c | 44 ----------- xen/arch/x86/mm/p2m.c | 2 - xen/arch/x86/mm/shadow/Makefile | 5 -- xen/arch/x86/mm/shadow/common.c | 85 +------------------- xen/arch/x86/mm/shadow/multi.c | 91 ---------------------- xen/arch/x86/mm/shadow/private.h | 9 --- xen/arch/x86/setup.c | 16 +--- xen/arch/x86/traps.c | 4 +- xen/arch/x86/x86_32/mm.c | 11 --- xen/arch/x86/x86_32/traps.c | 10 +-- xen/include/asm-x86/config.h | 41 +++------- xen/include/asm-x86/domain.h | 4 +- xen/include/asm-x86/fixmap.h | 2 +- xen/include/asm-x86/mm.h | 4 - xen/include/asm-x86/page.h | 16 +--- xen/include/asm-x86/types.h | 6 -- xen/include/asm-x86/x86_32/page-2level.h | 60 -------------- xen/include/asm-x86/x86_32/page-3level.h | 90 --------------------- xen/include/asm-x86/x86_32/page.h | 91 ++++++++++++++++++++-- xen/include/public/arch-x86/xen-x86_32.h | 7 +- 44 files changed, 128 insertions(+), 669 deletions(-) delete mode 100644 xen/include/asm-x86/x86_32/page-2level.h delete mode 100644 xen/include/asm-x86/x86_32/page-3level.h diff --git a/Config.mk b/Config.mk index 4481a40f56..01ed02bd6a 100644 --- a/Config.mk +++ b/Config.mk @@ -8,10 +8,6 @@ XEN_COMPILE_ARCH ?= $(shell uname -m | sed -e s/i.86/x86_32/ \ XEN_TARGET_ARCH ?= $(XEN_COMPILE_ARCH) XEN_OS ?= $(shell uname -s) -ifeq ($(XEN_TARGET_ARCH),x86_32) -XEN_TARGET_X86_PAE ?= y -endif - CONFIG_$(XEN_OS) := y SHELL ?= /bin/sh diff --git a/Makefile b/Makefile index fedbde3297..efa70195d4 100644 --- a/Makefile +++ b/Makefile @@ -13,10 +13,6 @@ SUBARCH := $(subst x86_32,i386,$(XEN_TARGET_ARCH)) export XEN_TARGET_ARCH SUBARCH XEN_SYSTYPE include buildconfigs/Rules.mk -ifeq ($(XEN_TARGET_X86_PAE),y) -export pae=y -endif - # build and install everything into the standard system directories .PHONY: install install: install-xen install-kernels install-tools install-docs diff --git a/buildconfigs/mk.linux-2.6-common b/buildconfigs/mk.linux-2.6-common index 024d55f680..05847e9731 100644 --- a/buildconfigs/mk.linux-2.6-common +++ b/buildconfigs/mk.linux-2.6-common @@ -91,11 +91,7 @@ ifneq ($(XEN_LINUX_CONFIG_UPDATE),) sh $(XEN_LINUX_CONFIG_UPDATE) $(CONFIG_FILE) endif ifeq ($(XEN_TARGET_ARCH),x86_32) -ifeq ($(pae),y) sed -e 's!^CONFIG_HIGHMEM4G=y$$!\# CONFIG_HIGHMEM4G is not set!;s!^\# CONFIG_HIGHMEM64G is not set$$!CONFIG_HIGHMEM64G=y!' $(CONFIG_FILE) > $(CONFIG_FILE)- && mv $(CONFIG_FILE)- $(CONFIG_FILE) -else - grep '^CONFIG_HIGHMEM64G=y' $(CONFIG_FILE) >/dev/null && ( sed -e 's!^CONFIG_HIGHMEM64G=y$$!\# CONFIG_HIGHMEM64G is not set!;s!^\# CONFIG_HIGHMEM4G is not set$$!CONFIG_HIGHMEM4G=y!' $(CONFIG_FILE) > $(CONFIG_FILE)- && mv $(CONFIG_FILE)- $(CONFIG_FILE) ) || true -endif endif ifneq ($(EXTRAVERSION),) echo "$(EXTRAVERSION)" >$(LINUX_DIR)/localversion-xen diff --git a/buildconfigs/mk.linux-2.6.5-SLES-xen b/buildconfigs/mk.linux-2.6.5-SLES-xen index 693e89ca64..b27e077a65 100644 --- a/buildconfigs/mk.linux-2.6.5-SLES-xen +++ b/buildconfigs/mk.linux-2.6.5-SLES-xen @@ -1,6 +1,4 @@ -# This tree only supports PAE XEN_TARGET_ARCH = x86_32 -XEN_TARGET_X86_PAE = y EXTRAVERSION = -xen LINUX_VER = 2.6.5-SLES diff --git a/buildconfigs/mk.linux-2.6.9-RHEL-xen b/buildconfigs/mk.linux-2.6.9-RHEL-xen index 9b1a9b87a7..ac830e56a3 100644 --- a/buildconfigs/mk.linux-2.6.9-RHEL-xen +++ b/buildconfigs/mk.linux-2.6.9-RHEL-xen @@ -1,6 +1,4 @@ -# This tree only supports PAE XEN_TARGET_ARCH = x86_32 -XEN_TARGET_X86_PAE = y EXTRAVERSION = -xen LINUX_VER = 2.6.9-RHEL diff --git a/extras/mini-os/Config.mk b/extras/mini-os/Config.mk index e38fae99cb..1eb68d2f4b 100644 --- a/extras/mini-os/Config.mk +++ b/extras/mini-os/Config.mk @@ -2,9 +2,6 @@ MINI-OS_ROOT=$(XEN_ROOT)/extras/mini-os export MINI-OS_ROOT -ifeq ($(XEN_TARGET_ARCH),x86_32) -export pae ?= y -endif libc = $(stubdom) XEN_INTERFACE_VERSION := 0x00030205 @@ -25,7 +22,6 @@ TARGET_ARCH_DIR := arch/$(TARGET_ARCH_FAM) # Export these variables for possible use in architecture dependent makefiles. export TARGET_ARCH_DIR export TARGET_ARCH_FAM -export XEN_TARGET_X86_PAE # This is used for architecture specific links. # This can be overwritten from arch specific rules. @@ -70,7 +66,3 @@ endif ifneq ($(CAMLDIR),) caml=y endif - -ifeq ($(pae),y) -DEF_CPPFLAGS += -DCONFIG_X86_PAE -endif diff --git a/extras/mini-os/arch/x86/arch.mk b/extras/mini-os/arch/x86/arch.mk index 1680362789..b27f322316 100644 --- a/extras/mini-os/arch/x86/arch.mk +++ b/extras/mini-os/arch/x86/arch.mk @@ -9,11 +9,6 @@ ARCH_LDFLAGS := -m elf_i386 ARCH_ASFLAGS := -m32 EXTRA_INC += $(TARGET_ARCH_FAM)/$(XEN_TARGET_ARCH) EXTRA_SRC += arch/$(EXTRA_INC) - -ifeq ($(XEN_TARGET_X86_PAE),y) -ARCH_CFLAGS += -DCONFIG_X86_PAE=1 -ARCH_ASFLAGS += -DCONFIG_X86_PAE=1 -endif endif ifeq ($(XEN_TARGET_ARCH),x86_64) diff --git a/extras/mini-os/arch/x86/mm.c b/extras/mini-os/arch/x86/mm.c index 8bc90eddea..1ef083aca8 100644 --- a/extras/mini-os/arch/x86/mm.c +++ b/extras/mini-os/arch/x86/mm.c @@ -79,13 +79,11 @@ void new_pt_frame(unsigned long *pt_pfn, unsigned long prev_l_mfn, prot_t = L2_PROT; pincmd = MMUEXT_PIN_L1_TABLE; break; -#if defined(__x86_64__) || defined(CONFIG_X86_PAE) case L2_FRAME: prot_e = L2_PROT; prot_t = L3_PROT; pincmd = MMUEXT_PIN_L2_TABLE; break; -#endif #if defined(__x86_64__) case L3_FRAME: prot_e = L3_PROT; @@ -102,11 +100,8 @@ void new_pt_frame(unsigned long *pt_pfn, unsigned long prev_l_mfn, /* Update the entry */ #if defined(__x86_64__) tab = pte_to_virt(tab[l4_table_offset(pt_page)]); - tab = pte_to_virt(tab[l3_table_offset(pt_page)]); #endif -#if defined(CONFIG_X86_PAE) tab = pte_to_virt(tab[l3_table_offset(pt_page)]); -#endif mmu_updates[0].ptr = ((pgentry_t)tab[l2_table_offset(pt_page)] & PAGE_MASK) + sizeof(pgentry_t) * l1_table_offset(pt_page); @@ -164,7 +159,6 @@ static int need_pt_frame(unsigned long virt_address, int level) } else #endif -#if defined(__x86_64__) || defined(CONFIG_X86_PAE) if(level == L2_FRAME) { #if defined(__x86_64__) @@ -181,7 +175,6 @@ static int need_pt_frame(unsigned long virt_address, int level) return 1; } else -#endif /* defined(__x86_64__) || defined(CONFIG_X86_PAE) */ /* Always need l1 frames */ if(level == L1_FRAME) @@ -236,7 +229,6 @@ void build_pagetable(unsigned long *start_pfn, unsigned long *max_pfn) mfn = pte_to_mfn(page); tab = to_virt(mfn_to_pfn(mfn) << PAGE_SHIFT); #endif -#if defined(__x86_64__) || defined(CONFIG_X86_PAE) offset = l3_table_offset(start_address); /* Need new L2 pt frame */ if(!(start_address & L2_MASK)) @@ -246,7 +238,6 @@ void build_pagetable(unsigned long *start_pfn, unsigned long *max_pfn) page = tab[offset]; mfn = pte_to_mfn(page); tab = to_virt(mfn_to_pfn(mfn) << PAGE_SHIFT); -#endif offset = l2_table_offset(start_address); /* Need new L1 pt frame */ if(!(start_address & L1_MASK)) @@ -298,12 +289,10 @@ static void set_readonly(void *text, void *etext) mfn = pte_to_mfn(page); tab = to_virt(mfn_to_pfn(mfn) << PAGE_SHIFT); #endif -#if defined(__x86_64__) || defined(CONFIG_X86_PAE) offset = l3_table_offset(start_address); page = tab[offset]; mfn = pte_to_mfn(page); tab = to_virt(mfn_to_pfn(mfn) << PAGE_SHIFT); -#endif offset = l2_table_offset(start_address); page = tab[offset]; mfn = pte_to_mfn(page); @@ -382,13 +371,11 @@ static pgentry_t *get_pgt(unsigned long addr) mfn = pte_to_mfn(tab[offset]); tab = mfn_to_virt(mfn); #endif -#if defined(__x86_64__) || defined(CONFIG_X86_PAE) offset = l3_table_offset(addr); if (!(tab[offset] & _PAGE_PRESENT)) return NULL; mfn = pte_to_mfn(tab[offset]); tab = mfn_to_virt(mfn); -#endif offset = l2_table_offset(addr); if (!(tab[offset] & _PAGE_PRESENT)) return NULL; @@ -418,7 +405,6 @@ static pgentry_t *need_pgt(unsigned long addr) mfn = pte_to_mfn(tab[offset]); tab = mfn_to_virt(mfn); #endif -#if defined(__x86_64__) || defined(CONFIG_X86_PAE) offset = l3_table_offset(addr); if (!(tab[offset] & _PAGE_PRESENT)) { pt_pfn = virt_to_pfn(alloc_page()); @@ -427,7 +413,6 @@ static pgentry_t *need_pgt(unsigned long addr) ASSERT(tab[offset] & _PAGE_PRESENT); mfn = pte_to_mfn(tab[offset]); tab = mfn_to_virt(mfn); -#endif offset = l2_table_offset(addr); if (!(tab[offset] & _PAGE_PRESENT)) { pt_pfn = virt_to_pfn(alloc_page()); diff --git a/extras/mini-os/arch/x86/setup.c b/extras/mini-os/arch/x86/setup.c index 066c87f5b7..ca97131315 100644 --- a/extras/mini-os/arch/x86/setup.c +++ b/extras/mini-os/arch/x86/setup.c @@ -53,7 +53,7 @@ extern char shared_info[PAGE_SIZE]; void hypervisor_callback(void); void failsafe_callback(void); -#if !defined(CONFIG_X86_PAE) +#if defined(__x86_64__) #define __pte(x) ((pte_t) { (x) } ) #else #define __pte(x) ({ unsigned long long _x = (x); \ diff --git a/extras/mini-os/arch/x86/traps.c b/extras/mini-os/arch/x86/traps.c index 2d65c312d2..5719f741e1 100644 --- a/extras/mini-os/arch/x86/traps.c +++ b/extras/mini-os/arch/x86/traps.c @@ -104,11 +104,9 @@ void page_walk(unsigned long virt_address) tab = pte_to_virt(page); printk(" L4 = %"PRIpte" (%p) [offset = %lx]\n", page, tab, l4_table_offset(addr)); #endif -#if defined(__x86_64__) || defined(CONFIG_X86_PAE) page = tab[l3_table_offset(addr)]; tab = pte_to_virt(page); printk(" L3 = %"PRIpte" (%p) [offset = %lx]\n", page, tab, l3_table_offset(addr)); -#endif page = tab[l2_table_offset(addr)]; tab = pte_to_virt(page); printk(" L2 = %"PRIpte" (%p) [offset = %lx]\n", page, tab, l2_table_offset(addr)); @@ -129,12 +127,11 @@ static int handle_cow(unsigned long addr) { return 0; tab = pte_to_virt(page); #endif -#if defined(__x86_64__) || defined(CONFIG_X86_PAE) page = tab[l3_table_offset(addr)]; if (!(page & _PAGE_PRESENT)) return 0; tab = pte_to_virt(page); -#endif + page = tab[l2_table_offset(addr)]; if (!(page & _PAGE_PRESENT)) return 0; diff --git a/extras/mini-os/arch/x86/x86_32.S b/extras/mini-os/arch/x86/x86_32.S index 7f01851f0c..1dfaf12524 100644 --- a/extras/mini-os/arch/x86/x86_32.S +++ b/extras/mini-os/arch/x86/x86_32.S @@ -8,11 +8,7 @@ .ascii ",VIRT_BASE=0x0" /* &_text from minios_x86_32.lds */ .ascii ",ELF_PADDR_OFFSET=0x0" .ascii ",HYPERCALL_PAGE=0x2" -#ifdef CONFIG_X86_PAE .ascii ",PAE=yes" -#else - .ascii ",PAE=no" -#endif .ascii ",LOADER=generic" .byte 0 .text diff --git a/extras/mini-os/include/types.h b/extras/mini-os/include/types.h index c11765167d..bf34373637 100644 --- a/extras/mini-os/include/types.h +++ b/extras/mini-os/include/types.h @@ -43,11 +43,7 @@ typedef unsigned long u_long; typedef long long quad_t; typedef unsigned long long u_quad_t; -#if !defined(CONFIG_X86_PAE) -typedef struct { unsigned long pte_low; } pte_t; -#else typedef struct { unsigned long pte_low, pte_high; } pte_t; -#endif /* CONFIG_X86_PAE */ #elif defined(__x86_64__) || defined(__ia64__) typedef long quad_t; @@ -56,7 +52,7 @@ typedef unsigned long u_quad_t; typedef struct { unsigned long pte; } pte_t; #endif /* __i386__ || __x86_64__ */ -#if !defined(CONFIG_X86_PAE) +#ifdef __x86_64__ #define __pte(x) ((pte_t) { (x) } ) #else #define __pte(x) ({ unsigned long long _x = (x); \ diff --git a/extras/mini-os/include/x86/arch_limits.h b/extras/mini-os/include/x86/arch_limits.h index 7f0351c67f..41f86207dc 100644 --- a/extras/mini-os/include/x86/arch_limits.h +++ b/extras/mini-os/include/x86/arch_limits.h @@ -7,7 +7,7 @@ #ifdef __ASSEMBLY__ #define __PAGE_SIZE (1 << __PAGE_SHIFT) #else -#ifndef CONFIG_X86_PAE +#ifdef __x86_64__ #define __PAGE_SIZE (1UL << __PAGE_SHIFT) #else #define __PAGE_SIZE (1ULL << __PAGE_SHIFT) diff --git a/extras/mini-os/include/x86/arch_mm.h b/extras/mini-os/include/x86/arch_mm.h index 7ad8bc14be..98876b130b 100644 --- a/extras/mini-os/include/x86/arch_mm.h +++ b/extras/mini-os/include/x86/arch_mm.h @@ -44,24 +44,6 @@ #if defined(__i386__) -#if !defined(CONFIG_X86_PAE) - -#define L2_PAGETABLE_SHIFT 22 - -#define L1_PAGETABLE_ENTRIES 1024 -#define L2_PAGETABLE_ENTRIES 1024 - -#define PADDR_BITS 32 -#define PADDR_MASK (~0UL) - -#define NOT_L1_FRAMES 1 -#define PRIpte "08lx" -#ifndef __ASSEMBLY__ -typedef unsigned long pgentry_t; -#endif - -#else /* defined(CONFIG_X86_PAE) */ - #define L2_PAGETABLE_SHIFT 21 #define L3_PAGETABLE_SHIFT 30 @@ -85,8 +67,6 @@ typedef unsigned long pgentry_t; typedef uint64_t pgentry_t; #endif -#endif /* !defined(CONFIG_X86_PAE) */ - #elif defined(__x86_64__) #define L2_PAGETABLE_SHIFT 21 @@ -122,10 +102,8 @@ typedef unsigned long pgentry_t; (((_a) >> L1_PAGETABLE_SHIFT) & (L1_PAGETABLE_ENTRIES - 1)) #define l2_table_offset(_a) \ (((_a) >> L2_PAGETABLE_SHIFT) & (L2_PAGETABLE_ENTRIES - 1)) -#if defined(__x86_64__) || defined(CONFIG_X86_PAE) #define l3_table_offset(_a) \ (((_a) >> L3_PAGETABLE_SHIFT) & (L3_PAGETABLE_ENTRIES - 1)) -#endif #if defined(__x86_64__) #define l4_table_offset(_a) \ (((_a) >> L4_PAGETABLE_SHIFT) & (L4_PAGETABLE_ENTRIES - 1)) @@ -146,9 +124,7 @@ typedef unsigned long pgentry_t; #define L1_PROT (_PAGE_PRESENT|_PAGE_RW|_PAGE_ACCESSED) #define L1_PROT_RO (_PAGE_PRESENT|_PAGE_ACCESSED) #define L2_PROT (_PAGE_PRESENT|_PAGE_RW|_PAGE_ACCESSED|_PAGE_DIRTY |_PAGE_USER) -#if defined(CONFIG_X86_PAE) #define L3_PROT (_PAGE_PRESENT) -#endif /* CONFIG_X86_PAE */ #elif defined(__x86_64__) #define L1_PROT (_PAGE_PRESENT|_PAGE_RW|_PAGE_ACCESSED|_PAGE_USER) #define L1_PROT_RO (_PAGE_PRESENT|_PAGE_ACCESSED|_PAGE_USER) @@ -172,7 +148,7 @@ typedef unsigned long pgentry_t; #ifndef __ASSEMBLY__ /* Definitions for machine and pseudophysical addresses. */ -#ifdef CONFIG_X86_PAE +#ifdef __i386__ typedef unsigned long long paddr_t; typedef unsigned long long maddr_t; #else @@ -225,14 +201,10 @@ static __inline__ paddr_t machine_to_phys(maddr_t machine) #define virtual_to_l3(_virt) PT_BASE #endif -#if defined(__x86_64__) || defined(CONFIG_X86_PAE) #define virtual_to_l2(_virt) ({ \ unsigned long __virt2 = (_virt); \ (pgentry_t *) pte_to_virt(virtual_to_l3(__virt2)[l3_table_offset(__virt2)]); \ }) -#else -#define virtual_to_l2(_virt) PT_BASE -#endif #define virtual_to_l1(_virt) ({ \ unsigned long __virt1 = (_virt); \ diff --git a/extras/mini-os/include/x86/x86_32/hypercall-x86_32.h b/extras/mini-os/include/x86/x86_32/hypercall-x86_32.h index fbaa7ba16e..e11010b413 100644 --- a/extras/mini-os/include/x86/x86_32/hypercall-x86_32.h +++ b/extras/mini-os/include/x86/x86_32/hypercall-x86_32.h @@ -220,12 +220,8 @@ static inline int HYPERVISOR_update_va_mapping( unsigned long va, pte_t new_val, unsigned long flags) { - unsigned long pte_hi = 0; -#ifdef CONFIG_X86_PAE - pte_hi = new_val.pte_high; -#endif return _hypercall4(int, update_va_mapping, va, - new_val.pte_low, pte_hi, flags); + new_val.pte_low, new_val.pte_high, flags); } static inline int @@ -267,12 +263,8 @@ static inline int HYPERVISOR_update_va_mapping_otherdomain( unsigned long va, pte_t new_val, unsigned long flags, domid_t domid) { - unsigned long pte_hi = 0; -#ifdef CONFIG_X86_PAE - pte_hi = new_val.pte_high; -#endif return _hypercall5(int, update_va_mapping_otherdomain, va, - new_val.pte_low, pte_hi, flags, domid); + new_val.pte_low, new_val.pte_high, flags, domid); } static inline int diff --git a/xen/arch/x86/Rules.mk b/xen/arch/x86/Rules.mk index 3c486be0ec..9380ccd780 100644 --- a/xen/arch/x86/Rules.mk +++ b/xen/arch/x86/Rules.mk @@ -9,7 +9,6 @@ xenoprof := y # If you change any of these configuration options then you must # 'make clean' before rebuilding. # -pae ?= n supervisor_mode_kernel ?= n # Solaris grabs stdarg.h and friends from the system include directory. @@ -31,10 +30,6 @@ CFLAGS += $(call cc-option,$(CC),-nopie,) CFLAGS += $(call cc-option,$(CC),-fno-stack-protector,) CFLAGS += $(call cc-option,$(CC),-fno-stack-protector-all,) -ifeq ($(TARGET_SUBARCH)$(pae),x86_32y) -CFLAGS += -DCONFIG_X86_PAE=1 -endif - ifeq ($(supervisor_mode_kernel),y) CFLAGS += -DCONFIG_X86_SUPERVISOR_MODE_KERNEL=1 endif diff --git a/xen/arch/x86/boot/head.S b/xen/arch/x86/boot/head.S index 7988051f91..c10aa62b2d 100644 --- a/xen/arch/x86/boot/head.S +++ b/xen/arch/x86/boot/head.S @@ -132,7 +132,7 @@ __start: mov %eax,sym_phys(idle_pg_table) + (262*8) /* PML4[262]: 1:1 map */ mov $(sym_phys(l3_xenmap)+7),%eax mov %eax,sym_phys(idle_pg_table) + (261*8) /* PML4[261]: xen map */ -#elif defined(CONFIG_X86_PAE) +#else /* Initialize low and high mappings of memory with 2MB pages */ mov $sym_phys(idle_pg_table_l2),%edi mov $0xe3,%eax /* PRESENT+RW+A+D+2MB */ @@ -147,19 +147,6 @@ __start: add $(1<>20(%edi) /* high mapping */ - stosl /* low mapping */ - add $(1<= 3 add $4,%edi -#endif add $PAGE_SIZE,%eax inc %ecx /* VGA hole (0xa0000-0xc0000) should be mapped UC. */ @@ -188,12 +173,9 @@ __start: #if defined(__x86_64__) mov %edi,sym_phys(l2_identmap) mov %edi,sym_phys(l2_xenmap) -#elif defined(CONFIG_X86_PAE) +#else mov %edi,sym_phys(idle_pg_table_l2) mov %edi,sym_phys(idle_pg_table_l2) + (__PAGE_OFFSET>>18) -#else - mov %edi,sym_phys(idle_pg_table) - mov %edi,sym_phys(idle_pg_table) + (__PAGE_OFFSET>>20) #endif /* Copy bootstrap trampoline to low memory, below 1MB. */ diff --git a/xen/arch/x86/boot/trampoline.S b/xen/arch/x86/boot/trampoline.S index af4de553a8..ad15f5c4e8 100644 --- a/xen/arch/x86/boot/trampoline.S +++ b/xen/arch/x86/boot/trampoline.S @@ -60,11 +60,7 @@ trampoline_protmode_entry: fninit /* Initialise CR4. */ -#if CONFIG_PAGING_LEVELS == 2 - mov $X86_CR4_PSE,%ecx -#else mov $X86_CR4_PAE,%ecx -#endif mov %ecx,%cr4 /* Load pagetable base register. */ @@ -72,7 +68,6 @@ trampoline_protmode_entry: add bootsym_phys(trampoline_xen_phys_start),%eax mov %eax,%cr3 -#if CONFIG_PAGING_LEVELS != 2 /* Set up EFER (Extended Feature Enable Register). */ mov bootsym_phys(cpuid_ext_features),%edi test $0x20100800,%edi /* SYSCALL/SYSRET, No Execute, Long Mode? */ @@ -88,7 +83,6 @@ trampoline_protmode_entry: btsl $_EFER_NX,%eax /* No Execute */ 1: wrmsr .Lskip_efer: -#endif mov $0x80050033,%eax /* hi-to-lo: PG,AM,WP,NE,ET,MP,PE */ mov %eax,%cr0 diff --git a/xen/arch/x86/boot/wakeup.S b/xen/arch/x86/boot/wakeup.S index a986b422f8..502f510102 100644 --- a/xen/arch/x86/boot/wakeup.S +++ b/xen/arch/x86/boot/wakeup.S @@ -126,11 +126,7 @@ wakeup_32: /* fpu init? */ /* Initialise CR4. */ -#if CONFIG_PAGING_LEVELS == 2 - mov $X86_CR4_PSE, %ecx -#else mov $X86_CR4_PAE, %ecx -#endif mov %ecx, %cr4 /* Load pagetable base register */ @@ -139,7 +135,6 @@ wakeup_32: mov %eax,%cr3 /* Will cpuid feature change after resume? */ -#if CONFIG_PAGING_LEVELS != 2 /* Set up EFER (Extended Feature Enable Register). */ mov bootsym_phys(cpuid_ext_features),%edi test $0x20100800,%edi /* SYSCALL/SYSRET, No Execute, Long Mode? */ @@ -155,7 +150,6 @@ wakeup_32: btsl $_EFER_NX,%eax /* No Execute */ 1: wrmsr .Lskip_eferw: -#endif wbinvd diff --git a/xen/arch/x86/boot/x86_32.S b/xen/arch/x86/boot/x86_32.S index a48c360611..5e29e4d7ea 100644 --- a/xen/arch/x86/boot/x86_32.S +++ b/xen/arch/x86/boot/x86_32.S @@ -81,14 +81,12 @@ gdt_descr: .long gdt_table - FIRST_RESERVED_GDT_BYTE -#ifdef CONFIG_X86_PAE .align 32 ENTRY(idle_pg_table) .long sym_phys(idle_pg_table_l2) + 0*PAGE_SIZE + 0x01, 0 .long sym_phys(idle_pg_table_l2) + 1*PAGE_SIZE + 0x01, 0 .long sym_phys(idle_pg_table_l2) + 2*PAGE_SIZE + 0x01, 0 .long sym_phys(idle_pg_table_l2) + 3*PAGE_SIZE + 0x01, 0 -#endif .align PAGE_SIZE, 0 /* NB. Rings != 0 get access up to MACH2PHYS_VIRT_END. This allows access to */ diff --git a/xen/arch/x86/domain_build.c b/xen/arch/x86/domain_build.c index 10b1460ba3..bfc4105491 100644 --- a/xen/arch/x86/domain_build.c +++ b/xen/arch/x86/domain_build.c @@ -398,11 +398,7 @@ int __init construct_dom0( v_end = (vstack_end + (1UL<<22)-1) & ~((1UL<<22)-1); if ( (v_end - vstack_end) < (512UL << 10) ) v_end += 1UL << 22; /* Add extra 4MB to get >= 512kB padding. */ -#if defined(__i386__) && !defined(CONFIG_X86_PAE) - if ( (((v_end - v_start + ((1UL<> - L2_PAGETABLE_SHIFT) + 1) <= nr_pt_pages ) - break; -#elif defined(__i386__) && defined(CONFIG_X86_PAE) +#if defined(__i386__) /* 5 pages: 1x 3rd + 4x 2nd level */ if ( (((v_end - v_start + ((1UL<> L2_PAGETABLE_SHIFT) + 5) <= nr_pt_pages ) diff --git a/xen/arch/x86/hvm/vmx/vmcs.c b/xen/arch/x86/hvm/vmx/vmcs.c index 48506c5b32..ab8b2d9b89 100644 --- a/xen/arch/x86/hvm/vmx/vmcs.c +++ b/xen/arch/x86/hvm/vmx/vmcs.c @@ -630,7 +630,7 @@ static int construct_vmcs(struct vcpu *v) if ( paging_mode_hap(d) ) { __vmwrite(EPT_POINTER, d->arch.hvm_domain.vmx.ept_control.eptp); -#ifdef CONFIG_X86_PAE +#ifdef __i386__ __vmwrite(EPT_POINTER_HIGH, d->arch.hvm_domain.vmx.ept_control.eptp >> 32); #endif diff --git a/xen/arch/x86/hvm/vmx/vmx.c b/xen/arch/x86/hvm/vmx/vmx.c index 4a348c06b8..4d80cf067f 100644 --- a/xen/arch/x86/hvm/vmx/vmx.c +++ b/xen/arch/x86/hvm/vmx/vmx.c @@ -934,7 +934,7 @@ static void vmx_load_pdptrs(struct vcpu *v) __vmwrite(GUEST_PDPTR1, guest_pdptrs[1]); __vmwrite(GUEST_PDPTR2, guest_pdptrs[2]); __vmwrite(GUEST_PDPTR3, guest_pdptrs[3]); -#ifdef CONFIG_X86_PAE +#ifdef __i386__ __vmwrite(GUEST_PDPTR0_HIGH, guest_pdptrs[0] >> 32); __vmwrite(GUEST_PDPTR1_HIGH, guest_pdptrs[1] >> 32); __vmwrite(GUEST_PDPTR2_HIGH, guest_pdptrs[2] >> 32); @@ -2253,7 +2253,7 @@ asmlinkage void vmx_vmexit_handler(struct cpu_user_regs *regs) case EXIT_REASON_EPT_VIOLATION: { paddr_t gpa = __vmread(GUEST_PHYSICAL_ADDRESS); -#ifdef CONFIG_X86_PAE +#ifdef __i386__ gpa |= (paddr_t)__vmread(GUEST_PHYSICAL_ADDRESS_HIGH) << 32; #endif exit_qualification = __vmread(EXIT_QUALIFICATION); diff --git a/xen/arch/x86/mm.c b/xen/arch/x86/mm.c index bca34d29c5..ef51a4181f 100644 --- a/xen/arch/x86/mm.c +++ b/xen/arch/x86/mm.c @@ -129,7 +129,7 @@ l1_pgentry_t __attribute__ ((__section__ (".bss.page_aligned"))) * 1. Debug builds get extra checking by using CMPXCHG[8B]. * 2. PAE builds perform an atomic 8-byte store with CMPXCHG8B. */ -#if !defined(NDEBUG) || defined(CONFIG_X86_PAE) +#if !defined(NDEBUG) || defined(__i386__) #define PTE_UPDATE_WITH_CMPXCHG #endif @@ -340,7 +340,7 @@ void share_xen_page_with_privileged_guests( share_xen_page_with_guest(page, dom_xen, readonly); } -#if defined(CONFIG_X86_PAE) +#if defined(__i386__) #ifdef NDEBUG /* Only PDPTs above 4GB boundary need to be shadowed in low memory. */ @@ -416,14 +416,14 @@ void make_cr3(struct vcpu *v, unsigned long mfn) spin_unlock(&cache->lock); } -#else /* !CONFIG_X86_PAE */ +#else /* !defined(__i386__) */ void make_cr3(struct vcpu *v, unsigned long mfn) { v->arch.cr3 = mfn << PAGE_SHIFT; } -#endif /* !CONFIG_X86_PAE */ +#endif /* !defined(__i386__) */ void write_ptbase(struct vcpu *v) { @@ -997,7 +997,6 @@ static int alloc_l1_table(struct page_info *page) return 0; } -#if defined(CONFIG_X86_PAE) || defined(CONFIG_COMPAT) static int create_pae_xen_mappings(struct domain *d, l3_pgentry_t *pl3e) { struct page_info *page; @@ -1070,11 +1069,8 @@ static int create_pae_xen_mappings(struct domain *d, l3_pgentry_t *pl3e) return 1; } -#else -# define create_pae_xen_mappings(d, pl3e) (1) -#endif -#ifdef CONFIG_X86_PAE +#ifdef __i386__ /* Flush a pgdir update into low-memory caches. */ static void pae_flush_pgd( unsigned long mfn, unsigned int idx, l3_pgentry_t nl3e) @@ -1144,20 +1140,6 @@ static int alloc_l2_table(struct page_info *page, unsigned long type) adjust_guest_l2e(pl2e[i], d); } -#if CONFIG_PAGING_LEVELS == 2 - /* Xen private mappings. */ - memcpy(&pl2e[L2_PAGETABLE_FIRST_XEN_SLOT], - &idle_pg_table[L2_PAGETABLE_FIRST_XEN_SLOT], - L2_PAGETABLE_XEN_SLOTS * sizeof(l2_pgentry_t)); - pl2e[l2_table_offset(LINEAR_PT_VIRT_START)] = - l2e_from_pfn(pfn, __PAGE_HYPERVISOR); - for ( i = 0; i < PDPT_L2_ENTRIES; i++ ) - pl2e[l2_table_offset(PERDOMAIN_VIRT_START) + i] = - l2e_from_page( - virt_to_page(page_get_owner(page)->arch.mm_perdomain_pt) + i, - __PAGE_HYPERVISOR); -#endif - unmap_domain_page(pl2e); return 1; @@ -1180,7 +1162,7 @@ static int alloc_l3_table(struct page_info *page) l3_pgentry_t *pl3e; int i; -#ifdef CONFIG_X86_PAE +#if CONFIG_PAGING_LEVELS == 3 /* * PAE pgdirs above 4GB are unacceptable if the guest does not understand * the weird 'extended cr3' format for dealing with high-order address @@ -1209,7 +1191,6 @@ static int alloc_l3_table(struct page_info *page) for ( i = 0; i < L3_PAGETABLE_ENTRIES; i++ ) { -#if defined(CONFIG_X86_PAE) || defined(CONFIG_COMPAT) if ( is_pv_32bit_domain(d) && (i == 3) ) { if ( !(l3e_get_flags(pl3e[i]) & _PAGE_PRESENT) || @@ -1220,12 +1201,10 @@ static int alloc_l3_table(struct page_info *page) d) ) goto fail; } - else -#endif - if ( is_guest_l3_slot(i) && - unlikely(!get_page_from_l3e(pl3e[i], pfn, d)) ) + else if ( is_guest_l3_slot(i) && + unlikely(!get_page_from_l3e(pl3e[i], pfn, d)) ) goto fail; - + adjust_guest_l3e(pl3e[i], d); } @@ -1562,14 +1541,12 @@ static int mod_l3_entry(l3_pgentry_t *pl3e, return 0; } -#if defined(CONFIG_X86_PAE) || defined(CONFIG_COMPAT) /* * Disallow updates to final L3 slot. It contains Xen mappings, and it * would be a pain to ensure they remain continuously valid throughout. */ if ( is_pv_32bit_domain(d) && (pgentry_ptr_to_slot(pl3e) >= 3) ) return 0; -#endif if ( unlikely(__copy_from_user(&ol3e, pl3e, sizeof(ol3e)) != 0) ) return 0; diff --git a/xen/arch/x86/mm/hap/hap.c b/xen/arch/x86/mm/hap/hap.c index e30acf6948..149efbb8cf 100644 --- a/xen/arch/x86/mm/hap/hap.c +++ b/xen/arch/x86/mm/hap/hap.c @@ -311,41 +311,6 @@ static void hap_install_xen_entries_in_l2h(struct vcpu *v, mfn_t l2hmfn) } #endif -#if CONFIG_PAGING_LEVELS == 2 -static void hap_install_xen_entries_in_l2(struct vcpu *v, mfn_t l2mfn) -{ - struct domain *d = v->domain; - l2_pgentry_t *l2e; - int i; - - l2e = hap_map_domain_page(l2mfn); - ASSERT(l2e != NULL); - - /* Copy the common Xen mappings from the idle domain */ - memcpy(&l2e[L2_PAGETABLE_FIRST_XEN_SLOT], - &idle_pg_table[L2_PAGETABLE_FIRST_XEN_SLOT], - L2_PAGETABLE_XEN_SLOTS * sizeof(l2_pgentry_t)); - - /* Install the per-domain mappings for this domain */ - for ( i = 0; i < PDPT_L2_ENTRIES; i++ ) - l2e[l2_table_offset(PERDOMAIN_VIRT_START) + i] = - l2e_from_pfn( - mfn_x(page_to_mfn(virt_to_page(d->arch.mm_perdomain_pt) + i)), - __PAGE_HYPERVISOR); - - /* Install the linear mapping */ - l2e[l2_table_offset(LINEAR_PT_VIRT_START)] = - l2e_from_pfn(mfn_x(l2mfn), __PAGE_HYPERVISOR); - - /* Install the domain-specific P2M table */ - l2e[l2_table_offset(RO_MPT_VIRT_START)] = - l2e_from_pfn(mfn_x(pagetable_get_mfn(d->arch.phys_table)), - __PAGE_HYPERVISOR); - - hap_unmap_domain_page(l2e); -} -#endif - static mfn_t hap_make_monitor_table(struct vcpu *v) { struct domain *d = v->domain; @@ -395,15 +360,6 @@ static mfn_t hap_make_monitor_table(struct vcpu *v) HAP_PRINTK("new monitor table: %#lx\n", mfn_x(m3mfn)); return m3mfn; } -#else - { - mfn_t m2mfn; - if ( (pg = hap_alloc(d)) == NULL ) - goto oom; - m2mfn = page_to_mfn(pg);; - hap_install_xen_entries_in_l2(v, m2mfn); - return m2mfn; - } #endif oom: diff --git a/xen/arch/x86/mm/p2m.c b/xen/arch/x86/mm/p2m.c index 182f3e7040..c525a171c5 100644 --- a/xen/arch/x86/mm/p2m.c +++ b/xen/arch/x86/mm/p2m.c @@ -488,8 +488,6 @@ int p2m_alloc_table(struct domain *d, PGT_l4_page_table #elif CONFIG_PAGING_LEVELS == 3 PGT_l3_page_table -#elif CONFIG_PAGING_LEVELS == 2 - PGT_l2_page_table #endif | 1 | PGT_validated; diff --git a/xen/arch/x86/mm/shadow/Makefile b/xen/arch/x86/mm/shadow/Makefile index 6de7cca484..ddf3d71c0b 100644 --- a/xen/arch/x86/mm/shadow/Makefile +++ b/xen/arch/x86/mm/shadow/Makefile @@ -1,9 +1,4 @@ -ifneq ($(pae),n) obj-$(x86_32) += common.o g2_on_s3.o g3_on_s3.o -else -obj-$(x86_32) += common.o g2_on_s2.o -endif - obj-$(x86_64) += common.o g4_on_s4.o g3_on_s3.o g2_on_s3.o guest_levels = $(subst g,,$(filter g%,$(subst ., ,$(subst _, ,$(1))))) diff --git a/xen/arch/x86/mm/shadow/common.c b/xen/arch/x86/mm/shadow/common.c index 70b9b64aeb..29a1b95c99 100644 --- a/xen/arch/x86/mm/shadow/common.c +++ b/xen/arch/x86/mm/shadow/common.c @@ -68,8 +68,6 @@ void shadow_vcpu_init(struct vcpu *v) v->arch.paging.mode = &SHADOW_INTERNAL_NAME(sh_paging_mode,3,3); #elif CONFIG_PAGING_LEVELS == 3 v->arch.paging.mode = &SHADOW_INTERNAL_NAME(sh_paging_mode,3,3); -#elif CONFIG_PAGING_LEVELS == 2 - v->arch.paging.mode = &SHADOW_INTERNAL_NAME(sh_paging_mode,2,2); #endif } @@ -504,27 +502,14 @@ sh_validate_guest_entry(struct vcpu *v, mfn_t gmfn, void *entry, u32 size) if ( !(page->count_info & PGC_page_table) ) return 0; /* Not shadowed at all */ -#if CONFIG_PAGING_LEVELS == 2 - if ( page->shadow_flags & SHF_L1_32 ) - result |= SHADOW_INTERNAL_NAME(sh_map_and_validate_gl1e, 2, 2) - (v, gmfn, entry, size); -#else if ( page->shadow_flags & SHF_L1_32 ) result |= SHADOW_INTERNAL_NAME(sh_map_and_validate_gl1e, 3, 2) (v, gmfn, entry, size); -#endif -#if CONFIG_PAGING_LEVELS == 2 - if ( page->shadow_flags & SHF_L2_32 ) - result |= SHADOW_INTERNAL_NAME(sh_map_and_validate_gl2e, 2, 2) - (v, gmfn, entry, size); -#else if ( page->shadow_flags & SHF_L2_32 ) result |= SHADOW_INTERNAL_NAME(sh_map_and_validate_gl2e, 3, 2) (v, gmfn, entry, size); -#endif -#if CONFIG_PAGING_LEVELS >= 3 if ( page->shadow_flags & SHF_L1_PAE ) result |= SHADOW_INTERNAL_NAME(sh_map_and_validate_gl1e, 3, 3) (v, gmfn, entry, size); @@ -534,9 +519,6 @@ sh_validate_guest_entry(struct vcpu *v, mfn_t gmfn, void *entry, u32 size) if ( page->shadow_flags & SHF_L2H_PAE ) result |= SHADOW_INTERNAL_NAME(sh_map_and_validate_gl2he, 3, 3) (v, gmfn, entry, size); -#else /* 32-bit non-PAE hypervisor does not support PAE guests */ - ASSERT((page->shadow_flags & (SHF_L2H_PAE|SHF_L2_PAE|SHF_L1_PAE)) == 0); -#endif #if CONFIG_PAGING_LEVELS >= 4 if ( page->shadow_flags & SHF_L1_64 ) @@ -554,7 +536,7 @@ sh_validate_guest_entry(struct vcpu *v, mfn_t gmfn, void *entry, u32 size) if ( page->shadow_flags & SHF_L4_64 ) result |= SHADOW_INTERNAL_NAME(sh_map_and_validate_gl4e, 4, 4) (v, gmfn, entry, size); -#else /* 32-bit/PAE hypervisor does not support 64-bit guests */ +#else /* 32-bit hypervisor does not support 64-bit guests */ ASSERT((page->shadow_flags & (SHF_L4_64|SHF_L3_64|SHF_L2H_64|SHF_L2_64|SHF_L1_64)) == 0); #endif @@ -685,7 +667,6 @@ static unsigned int shadow_min_acceptable_pages(struct domain *d) static inline u32 shadow_order(unsigned int shadow_type) { -#if CONFIG_PAGING_LEVELS > 2 static const u32 type_to_order[SH_type_unused] = { 0, /* SH_type_none */ 1, /* SH_type_l1_32_shadow */ @@ -706,9 +687,6 @@ shadow_order(unsigned int shadow_type) }; ASSERT(shadow_type < SH_type_unused); return type_to_order[shadow_type]; -#else /* 32-bit Xen only ever shadows 32-bit guests on 32-bit shadows. */ - return 0; -#endif } static inline unsigned int @@ -745,18 +723,12 @@ static void shadow_unhook_mappings(struct vcpu *v, mfn_t smfn) switch ( sp->type ) { case SH_type_l2_32_shadow: -#if CONFIG_PAGING_LEVELS == 2 - SHADOW_INTERNAL_NAME(sh_unhook_32b_mappings,2,2)(v,smfn); -#else SHADOW_INTERNAL_NAME(sh_unhook_32b_mappings,3,2)(v,smfn); -#endif break; -#if CONFIG_PAGING_LEVELS >= 3 case SH_type_l2_pae_shadow: case SH_type_l2h_pae_shadow: SHADOW_INTERNAL_NAME(sh_unhook_pae_mappings,3,3)(v,smfn); break; -#endif #if CONFIG_PAGING_LEVELS >= 4 case SH_type_l4_64_shadow: SHADOW_INTERNAL_NAME(sh_unhook_64b_mappings,4,4)(v,smfn); @@ -1599,15 +1571,6 @@ void sh_destroy_shadow(struct vcpu *v, mfn_t smfn) * small numbers that the compiler will enjoy */ switch ( t ) { -#if CONFIG_PAGING_LEVELS == 2 - case SH_type_l1_32_shadow: - case SH_type_fl1_32_shadow: - SHADOW_INTERNAL_NAME(sh_destroy_l1_shadow, 2, 2)(v, smfn); - break; - case SH_type_l2_32_shadow: - SHADOW_INTERNAL_NAME(sh_destroy_l2_shadow, 2, 2)(v, smfn); - break; -#else /* PAE or 64bit */ case SH_type_l1_32_shadow: case SH_type_fl1_32_shadow: SHADOW_INTERNAL_NAME(sh_destroy_l1_shadow, 3, 2)(v, smfn); @@ -1615,9 +1578,7 @@ void sh_destroy_shadow(struct vcpu *v, mfn_t smfn) case SH_type_l2_32_shadow: SHADOW_INTERNAL_NAME(sh_destroy_l2_shadow, 3, 2)(v, smfn); break; -#endif -#if CONFIG_PAGING_LEVELS >= 3 case SH_type_l1_pae_shadow: case SH_type_fl1_pae_shadow: SHADOW_INTERNAL_NAME(sh_destroy_l1_shadow, 3, 3)(v, smfn); @@ -1626,7 +1587,6 @@ void sh_destroy_shadow(struct vcpu *v, mfn_t smfn) case SH_type_l2h_pae_shadow: SHADOW_INTERNAL_NAME(sh_destroy_l2_shadow, 3, 3)(v, smfn); break; -#endif #if CONFIG_PAGING_LEVELS >= 4 case SH_type_l1_64_shadow: @@ -1666,21 +1626,11 @@ int sh_remove_write_access(struct vcpu *v, mfn_t gmfn, /* Dispatch table for getting per-type functions */ static hash_callback_t callbacks[SH_type_unused] = { NULL, /* none */ -#if CONFIG_PAGING_LEVELS == 2 - SHADOW_INTERNAL_NAME(sh_rm_write_access_from_l1,2,2), /* l1_32 */ - SHADOW_INTERNAL_NAME(sh_rm_write_access_from_l1,2,2), /* fl1_32 */ -#else SHADOW_INTERNAL_NAME(sh_rm_write_access_from_l1,3,2), /* l1_32 */ SHADOW_INTERNAL_NAME(sh_rm_write_access_from_l1,3,2), /* fl1_32 */ -#endif NULL, /* l2_32 */ -#if CONFIG_PAGING_LEVELS >= 3 SHADOW_INTERNAL_NAME(sh_rm_write_access_from_l1,3,3), /* l1_pae */ SHADOW_INTERNAL_NAME(sh_rm_write_access_from_l1,3,3), /* fl1_pae */ -#else - NULL, /* l1_pae */ - NULL, /* fl1_pae */ -#endif NULL, /* l2_pae */ NULL, /* l2h_pae */ #if CONFIG_PAGING_LEVELS >= 4 @@ -1860,21 +1810,11 @@ int sh_remove_all_mappings(struct vcpu *v, mfn_t gmfn) /* Dispatch table for getting per-type functions */ static hash_callback_t callbacks[SH_type_unused] = { NULL, /* none */ -#if CONFIG_PAGING_LEVELS == 2 - SHADOW_INTERNAL_NAME(sh_rm_mappings_from_l1,2,2), /* l1_32 */ - SHADOW_INTERNAL_NAME(sh_rm_mappings_from_l1,2,2), /* fl1_32 */ -#else SHADOW_INTERNAL_NAME(sh_rm_mappings_from_l1,3,2), /* l1_32 */ SHADOW_INTERNAL_NAME(sh_rm_mappings_from_l1,3,2), /* fl1_32 */ -#endif NULL, /* l2_32 */ -#if CONFIG_PAGING_LEVELS >= 3 SHADOW_INTERNAL_NAME(sh_rm_mappings_from_l1,3,3), /* l1_pae */ SHADOW_INTERNAL_NAME(sh_rm_mappings_from_l1,3,3), /* fl1_pae */ -#else - NULL, /* l1_pae */ - NULL, /* fl1_pae */ -#endif NULL, /* l2_pae */ NULL, /* l2h_pae */ #if CONFIG_PAGING_LEVELS >= 4 @@ -1978,13 +1918,8 @@ static int sh_remove_shadow_via_pointer(struct vcpu *v, mfn_t smfn) { case SH_type_l1_32_shadow: case SH_type_l2_32_shadow: -#if CONFIG_PAGING_LEVELS == 2 - SHADOW_INTERNAL_NAME(sh_clear_shadow_entry,2,2)(v, vaddr, pmfn); -#else SHADOW_INTERNAL_NAME(sh_clear_shadow_entry,3,2)(v, vaddr, pmfn); -#endif break; -#if CONFIG_PAGING_LEVELS >=3 case SH_type_l1_pae_shadow: case SH_type_l2_pae_shadow: case SH_type_l2h_pae_shadow: @@ -1998,7 +1933,6 @@ static int sh_remove_shadow_via_pointer(struct vcpu *v, mfn_t smfn) case SH_type_l4_64_shadow: SHADOW_INTERNAL_NAME(sh_clear_shadow_entry,4,4)(v, vaddr, pmfn); break; -#endif #endif default: BUG(); /* Some wierd unknown shadow type */ } @@ -2032,20 +1966,11 @@ void sh_remove_shadows(struct vcpu *v, mfn_t gmfn, int fast, int all) NULL, /* none */ NULL, /* l1_32 */ NULL, /* fl1_32 */ -#if CONFIG_PAGING_LEVELS == 2 - SHADOW_INTERNAL_NAME(sh_remove_l1_shadow,2,2), /* l2_32 */ -#else SHADOW_INTERNAL_NAME(sh_remove_l1_shadow,3,2), /* l2_32 */ -#endif NULL, /* l1_pae */ NULL, /* fl1_pae */ -#if CONFIG_PAGING_LEVELS >= 3 SHADOW_INTERNAL_NAME(sh_remove_l1_shadow,3,3), /* l2_pae */ SHADOW_INTERNAL_NAME(sh_remove_l1_shadow,3,3), /* l2h_pae */ -#else - NULL, /* l2_pae */ - NULL, /* l2h_pae */ -#endif NULL, /* l1_64 */ NULL, /* fl1_64 */ #if CONFIG_PAGING_LEVELS >= 4 @@ -2232,8 +2157,6 @@ static void sh_update_paging_modes(struct vcpu *v) v->arch.paging.mode = &SHADOW_INTERNAL_NAME(sh_paging_mode,4,4); #elif CONFIG_PAGING_LEVELS == 3 v->arch.paging.mode = &SHADOW_INTERNAL_NAME(sh_paging_mode,3,3); -#elif CONFIG_PAGING_LEVELS == 2 - v->arch.paging.mode = &SHADOW_INTERNAL_NAME(sh_paging_mode,2,2); #else #error unexpected paging mode #endif @@ -3110,11 +3033,6 @@ void shadow_audit_tables(struct vcpu *v) /* Dispatch table for getting per-type functions */ static hash_callback_t callbacks[SH_type_unused] = { NULL, /* none */ -#if CONFIG_PAGING_LEVELS == 2 - SHADOW_INTERNAL_NAME(sh_audit_l1_table,2,2), /* l1_32 */ - SHADOW_INTERNAL_NAME(sh_audit_fl1_table,2,2), /* fl1_32 */ - SHADOW_INTERNAL_NAME(sh_audit_l2_table,2,2), /* l2_32 */ -#else SHADOW_INTERNAL_NAME(sh_audit_l1_table,3,2), /* l1_32 */ SHADOW_INTERNAL_NAME(sh_audit_fl1_table,3,2), /* fl1_32 */ SHADOW_INTERNAL_NAME(sh_audit_l2_table,3,2), /* l2_32 */ @@ -3130,7 +3048,6 @@ void shadow_audit_tables(struct vcpu *v) SHADOW_INTERNAL_NAME(sh_audit_l3_table,4,4), /* l3_64 */ SHADOW_INTERNAL_NAME(sh_audit_l4_table,4,4), /* l4_64 */ #endif /* CONFIG_PAGING_LEVELS >= 4 */ -#endif /* CONFIG_PAGING_LEVELS > 2 */ NULL /* All the rest */ }; unsigned int mask; diff --git a/xen/arch/x86/mm/shadow/multi.c b/xen/arch/x86/mm/shadow/multi.c index 0d88127558..0878aacf52 100644 --- a/xen/arch/x86/mm/shadow/multi.c +++ b/xen/arch/x86/mm/shadow/multi.c @@ -1745,56 +1745,6 @@ static void sh_install_xen_entries_in_l2h(struct vcpu *v, mfn_t sl2hmfn) #endif -#if CONFIG_PAGING_LEVELS == 2 && GUEST_PAGING_LEVELS == 2 -void sh_install_xen_entries_in_l2(struct vcpu *v, mfn_t gl2mfn, mfn_t sl2mfn) -{ - struct domain *d = v->domain; - shadow_l2e_t *sl2e; - int i; - - sl2e = sh_map_domain_page(sl2mfn); - ASSERT(sl2e != NULL); - ASSERT(sizeof (l2_pgentry_t) == sizeof (shadow_l2e_t)); - - /* Copy the common Xen mappings from the idle domain */ - memcpy(&sl2e[L2_PAGETABLE_FIRST_XEN_SLOT], - &idle_pg_table[L2_PAGETABLE_FIRST_XEN_SLOT], - L2_PAGETABLE_XEN_SLOTS * sizeof(l2_pgentry_t)); - - /* Install the per-domain mappings for this domain */ - for ( i = 0; i < PDPT_L2_ENTRIES; i++ ) - sl2e[shadow_l2_table_offset(PERDOMAIN_VIRT_START) + i] = - shadow_l2e_from_mfn( - page_to_mfn(virt_to_page(d->arch.mm_perdomain_pt) + i), - __PAGE_HYPERVISOR); - - /* Linear mapping */ - sl2e[shadow_l2_table_offset(SH_LINEAR_PT_VIRT_START)] = - shadow_l2e_from_mfn(sl2mfn, __PAGE_HYPERVISOR); - - if ( shadow_mode_translate(v->domain) && !shadow_mode_external(v->domain) ) - { - // linear tables may not be used with translated PV guests - sl2e[shadow_l2_table_offset(LINEAR_PT_VIRT_START)] = - shadow_l2e_empty(); - } - else - { - sl2e[shadow_l2_table_offset(LINEAR_PT_VIRT_START)] = - shadow_l2e_from_mfn(gl2mfn, __PAGE_HYPERVISOR); - } - - if ( shadow_mode_translate(d) ) - { - /* install domain-specific P2M table */ - sl2e[shadow_l2_table_offset(RO_MPT_VIRT_START)] = - shadow_l2e_from_mfn(pagetable_get_mfn(d->arch.phys_table), - __PAGE_HYPERVISOR); - } - - sh_unmap_domain_page(sl2e); -} -#endif @@ -1865,10 +1815,6 @@ sh_make_shadow(struct vcpu *v, mfn_t gmfn, u32 shadow_type) #if CONFIG_PAGING_LEVELS >= 3 && GUEST_PAGING_LEVELS >= 3 case SH_type_l2h_shadow: sh_install_xen_entries_in_l2h(v, smfn); break; -#endif -#if CONFIG_PAGING_LEVELS == 2 && GUEST_PAGING_LEVELS == 2 - case SH_type_l2_shadow: - sh_install_xen_entries_in_l2(v, gmfn, smfn); break; #endif default: /* Do nothing */ break; } @@ -1989,17 +1935,6 @@ sh_make_monitor_table(struct vcpu *v) return m3mfn; } -#elif CONFIG_PAGING_LEVELS == 2 - - { - mfn_t m2mfn; - m2mfn = shadow_alloc(d, SH_type_monitor_table, 0); - sh_install_xen_entries_in_l2(v, m2mfn, m2mfn); - /* Remember the level of this table */ - mfn_to_page(m2mfn)->shadow_flags = 2; - return m2mfn; - } - #else #error this should not happen #endif /* CONFIG_PAGING_LEVELS */ @@ -3641,32 +3576,6 @@ sh_update_linear_entries(struct vcpu *v) sh_unmap_domain_page(l2e); } -#elif CONFIG_PAGING_LEVELS == 2 - - /* For PV, one l2e points at the guest l2, one points at the shadow - * l2. No maintenance required. - * For HVM, just need to update the l2e that points to the shadow l2. */ - - if ( shadow_mode_external(d) ) - { - /* Use the linear map if we can; otherwise make a new mapping */ - if ( v == current ) - { - __linear_l2_table[l2_linear_offset(SH_LINEAR_PT_VIRT_START)] = - l2e_from_pfn(pagetable_get_pfn(v->arch.shadow_table[0]), - __PAGE_HYPERVISOR); - } - else - { - l2_pgentry_t *ml2e; - ml2e = sh_map_domain_page(pagetable_get_mfn(v->arch.monitor_table)); - ml2e[l2_table_offset(SH_LINEAR_PT_VIRT_START)] = - l2e_from_pfn(pagetable_get_pfn(v->arch.shadow_table[0]), - __PAGE_HYPERVISOR); - sh_unmap_domain_page(ml2e); - } - } - #else #error this should not happen #endif diff --git a/xen/arch/x86/mm/shadow/private.h b/xen/arch/x86/mm/shadow/private.h index e350b48f0b..0096764b12 100644 --- a/xen/arch/x86/mm/shadow/private.h +++ b/xen/arch/x86/mm/shadow/private.h @@ -162,14 +162,6 @@ extern void shadow_audit_tables(struct vcpu *v); #define SHADOW_INTERNAL_NAME(name, shadow_levels, guest_levels) \ SHADOW_INTERNAL_NAME_HIDDEN(name, shadow_levels, guest_levels) -#if CONFIG_PAGING_LEVELS == 2 -#define GUEST_LEVELS 2 -#define SHADOW_LEVELS 2 -#include "multi.h" -#undef GUEST_LEVELS -#undef SHADOW_LEVELS -#endif /* CONFIG_PAGING_LEVELS == 2 */ - #if CONFIG_PAGING_LEVELS == 3 #define GUEST_LEVELS 2 #define SHADOW_LEVELS 3 @@ -360,7 +352,6 @@ void shadow_free(struct domain *d, mfn_t smfn); /* Install the xen mappings in various flavours of shadow */ void sh_install_xen_entries_in_l4(struct vcpu *v, mfn_t gl4mfn, mfn_t sl4mfn); -void sh_install_xen_entries_in_l2(struct vcpu *v, mfn_t gl2mfn, mfn_t sl2mfn); /* Update the shadows in response to a pagetable write from Xen */ int sh_validate_guest_entry(struct vcpu *v, mfn_t gmfn, void *entry, u32 size); diff --git a/xen/arch/x86/setup.c b/xen/arch/x86/setup.c index c71cfd045f..add264d914 100644 --- a/xen/arch/x86/setup.c +++ b/xen/arch/x86/setup.c @@ -121,11 +121,7 @@ char __attribute__ ((__section__(".bss.stack_aligned"))) cpu0_stack[STACK_SIZE]; struct cpuinfo_x86 boot_cpu_data = { 0, 0, 0, 0, -1 }; -#if CONFIG_PAGING_LEVELS > 2 unsigned long mmu_cr4_features = X86_CR4_PSE | X86_CR4_PGE | X86_CR4_PAE; -#else -unsigned long mmu_cr4_features = X86_CR4_PSE; -#endif EXPORT_SYMBOL(mmu_cr4_features); int acpi_disabled; @@ -1064,17 +1060,7 @@ void arch_get_xen_caps(xen_capabilities_info_t *info) (*info)[0] = '\0'; -#if defined(CONFIG_X86_32) && !defined(CONFIG_X86_PAE) - - snprintf(s, sizeof(s), "xen-%d.%d-x86_32 ", major, minor); - safe_strcat(*info, s); - if ( hvm_enabled ) - { - snprintf(s, sizeof(s), "hvm-%d.%d-x86_32 ", major, minor); - safe_strcat(*info, s); - } - -#elif defined(CONFIG_X86_32) && defined(CONFIG_X86_PAE) +#if defined(CONFIG_X86_32) snprintf(s, sizeof(s), "xen-%d.%d-x86_32p ", major, minor); safe_strcat(*info, s); diff --git a/xen/arch/x86/traps.c b/xen/arch/x86/traps.c index 54776ccc8c..1108d02da6 100644 --- a/xen/arch/x86/traps.c +++ b/xen/arch/x86/traps.c @@ -1021,13 +1021,13 @@ static int __spurious_page_fault( #if CONFIG_PAGING_LEVELS >= 3 l3t = map_domain_page(mfn); -#ifdef CONFIG_X86_PAE +#if CONFIG_PAGING_LEVELS == 3 l3t += (cr3 & 0xFE0UL) >> 3; #endif l3e = l3e_read_atomic(&l3t[l3_table_offset(addr)]); mfn = l3e_get_pfn(l3e); unmap_domain_page(l3t); -#ifdef CONFIG_X86_PAE +#if CONFIG_PAGING_LEVELS == 3 if ( !(l3e_get_flags(l3e) & _PAGE_PRESENT) ) return 0; #else diff --git a/xen/arch/x86/x86_32/mm.c b/xen/arch/x86/x86_32/mm.c index 8a0054bbcd..7d1e810a0b 100644 --- a/xen/arch/x86/x86_32/mm.c +++ b/xen/arch/x86/x86_32/mm.c @@ -30,13 +30,8 @@ #include #include -#ifdef CONFIG_X86_PAE l2_pgentry_t __attribute__ ((__section__ (".bss.page_aligned"))) idle_pg_table_l2[4 * L2_PAGETABLE_ENTRIES]; -#else -l2_pgentry_t __attribute__ ((__section__ (".bss.page_aligned"))) - idle_pg_table_l2[L2_PAGETABLE_ENTRIES]; -#endif extern l1_pgentry_t l1_identmap[L1_PAGETABLE_ENTRIES]; @@ -74,12 +69,6 @@ void __init paging_init(void) struct page_info *pg; int i; -#ifdef CONFIG_X86_PAE - printk("PAE enabled, limit: %d GB\n", MACHPHYS_MBYTES); -#else - printk("PAE disabled.\n"); -#endif - if ( cpu_has_pge ) { /* Suitable Xen mapping can be GLOBAL. */ diff --git a/xen/arch/x86/x86_32/traps.c b/xen/arch/x86/x86_32/traps.c index b91c922b10..1913ccc291 100644 --- a/xen/arch/x86/x86_32/traps.c +++ b/xen/arch/x86/x86_32/traps.c @@ -21,16 +21,12 @@ static void print_xen_info(void) { char taint_str[TAINT_STRING_MAX_LEN]; - char debug = 'n', *arch = "x86_32"; + char debug = 'n', *arch = "x86_32p"; #ifndef NDEBUG debug = 'y'; #endif -#ifdef CONFIG_X86_PAE - arch = "x86_32p"; -#endif - printk("----[ Xen-%d.%d%s %s debug=%c %s ]----\n", xen_major_version(), xen_minor_version(), xen_extra_version(), arch, debug, print_tainted(taint_str)); @@ -117,9 +113,7 @@ void show_registers(struct cpu_user_regs *regs) void show_page_walk(unsigned long addr) { unsigned long pfn, mfn, cr3 = read_cr3(); -#ifdef CONFIG_X86_PAE l3_pgentry_t l3e, *l3t; -#endif l2_pgentry_t l2e, *l2t; l1_pgentry_t l1e, *l1t; @@ -127,7 +121,6 @@ void show_page_walk(unsigned long addr) mfn = cr3 >> PAGE_SHIFT; -#ifdef CONFIG_X86_PAE l3t = map_domain_page(mfn); l3t += (cr3 & 0xFE0UL) >> 3; l3e = l3t[l3_table_offset(addr)]; @@ -138,7 +131,6 @@ void show_page_walk(unsigned long addr) unmap_domain_page(l3t); if ( !(l3e_get_flags(l3e) & _PAGE_PRESENT) ) return; -#endif l2t = map_domain_page(mfn); l2e = l2t[l2_table_offset(addr)]; diff --git a/xen/include/asm-x86/config.h b/xen/include/asm-x86/config.h index 68b5da881b..006910c299 100644 --- a/xen/include/asm-x86/config.h +++ b/xen/include/asm-x86/config.h @@ -9,10 +9,8 @@ #if defined(__x86_64__) # define CONFIG_PAGING_LEVELS 4 -#elif defined(CONFIG_X86_PAE) -# define CONFIG_PAGING_LEVELS 3 #else -# define CONFIG_PAGING_LEVELS 2 +# define CONFIG_PAGING_LEVELS 3 #endif #define CONFIG_X86 1 @@ -274,17 +272,17 @@ extern unsigned int video_mode, video_flags; #define asmlinkage __attribute__((regparm(0))) /* - * Memory layout (high to low): SIZE PAE-SIZE - * ------ ------ + * Memory layout (high to low): PAE-SIZE + * ------ * I/O remapping area ( 4MB) * Direct-map (1:1) area [Xen code/data/heap] (12MB) * Per-domain mappings (inc. 4MB map_domain_page cache) ( 8MB) - * Shadow linear pagetable ( 4MB) ( 8MB) - * Guest linear pagetable ( 4MB) ( 8MB) - * Machine-to-physical translation table [writable] ( 4MB) (16MB) - * Frame-info table (24MB) (96MB) + * Shadow linear pagetable ( 8MB) + * Guest linear pagetable ( 8MB) + * Machine-to-physical translation table [writable] (16MB) + * Frame-info table (96MB) * * Start of guest inaccessible area - * Machine-to-physical translation table [read-only] ( 4MB) (16MB) + * Machine-to-physical translation table [read-only] (16MB) * * Start of guest unmodifiable area */ @@ -293,15 +291,9 @@ extern unsigned int video_mode, video_flags; #define MAPCACHE_MBYTES 4 #define PERDOMAIN_MBYTES 8 -#ifdef CONFIG_X86_PAE -# define LINEARPT_MBYTES 8 -# define MACHPHYS_MBYTES 16 /* 1 MB needed per 1 GB memory */ -# define FRAMETABLE_MBYTES (MACHPHYS_MBYTES * 6) -#else -# define LINEARPT_MBYTES 4 -# define MACHPHYS_MBYTES 4 -# define FRAMETABLE_MBYTES 24 -#endif +#define LINEARPT_MBYTES 8 +#define MACHPHYS_MBYTES 16 /* 1 MB needed per 1 GB memory */ +#define FRAMETABLE_MBYTES (MACHPHYS_MBYTES * 6) #define IOREMAP_VIRT_END 0UL #define IOREMAP_VIRT_START (IOREMAP_VIRT_END - (IOREMAP_MBYTES<<20)) @@ -328,13 +320,8 @@ extern unsigned int video_mode, video_flags; /* Maximum linear address accessible via guest memory segments. */ #define GUEST_SEGMENT_MAX_ADDR RO_MPT_VIRT_END -#ifdef CONFIG_X86_PAE /* Hypervisor owns top 168MB of virtual address space. */ #define HYPERVISOR_VIRT_START mk_unsigned_long(0xF5800000) -#else -/* Hypervisor owns top 64MB of virtual address space. */ -#define HYPERVISOR_VIRT_START mk_unsigned_long(0xFC000000) -#endif #define L2_PAGETABLE_FIRST_XEN_SLOT \ (HYPERVISOR_VIRT_START >> L2_PAGETABLE_SHIFT) @@ -343,11 +330,7 @@ extern unsigned int video_mode, video_flags; #define L2_PAGETABLE_XEN_SLOTS \ (L2_PAGETABLE_LAST_XEN_SLOT - L2_PAGETABLE_FIRST_XEN_SLOT + 1) -#ifdef CONFIG_X86_PAE -# define PGT_base_page_table PGT_l3_page_table -#else -# define PGT_base_page_table PGT_l2_page_table -#endif +#define PGT_base_page_table PGT_l3_page_table #define __HYPERVISOR_CS 0xe008 #define __HYPERVISOR_DS 0xe010 diff --git a/xen/include/asm-x86/domain.h b/xen/include/asm-x86/domain.h index 106a90656e..cf225ced72 100644 --- a/xen/include/asm-x86/domain.h +++ b/xen/include/asm-x86/domain.h @@ -255,7 +255,7 @@ struct arch_domain cpuid_input_t cpuids[MAX_CPUID_INPUT]; } __cacheline_aligned; -#ifdef CONFIG_X86_PAE +#ifdef __i386__ struct pae_l3_cache { /* * Two low-memory (<4GB) PAE L3 tables, used as fallback when the guest @@ -269,7 +269,7 @@ struct pae_l3_cache { spinlock_t lock; }; #define pae_l3_cache_init(c) spin_lock_init(&(c)->lock) -#else /* !CONFIG_X86_PAE */ +#else /* !defined(__i386__) */ struct pae_l3_cache { }; #define pae_l3_cache_init(c) ((void)0) #endif diff --git a/xen/include/asm-x86/fixmap.h b/xen/include/asm-x86/fixmap.h index 2c0dacf124..4917336a71 100644 --- a/xen/include/asm-x86/fixmap.h +++ b/xen/include/asm-x86/fixmap.h @@ -29,7 +29,7 @@ * from the end of virtual memory backwards. */ enum fixed_addresses { -#ifdef CONFIG_X86_PAE +#ifdef __i386__ FIX_PAE_HIGHMEM_0, FIX_PAE_HIGHMEM_END = FIX_PAE_HIGHMEM_0 + NR_CPUS-1, #endif diff --git a/xen/include/asm-x86/mm.h b/xen/include/asm-x86/mm.h index f4fdad1327..2145b2394d 100644 --- a/xen/include/asm-x86/mm.h +++ b/xen/include/asm-x86/mm.h @@ -122,11 +122,7 @@ static inline u32 pickle_domptr(struct domain *domain) #endif /* The order of the largest allocation unit we use for shadow pages */ -#if CONFIG_PAGING_LEVELS == 2 -#define SHADOW_MAX_ORDER 0 /* Only ever need 4k allocations */ -#else #define SHADOW_MAX_ORDER 2 /* Need up to 16k allocs for 32-bit on PAE/64 */ -#endif #define page_get_owner(_p) (unpickle_domptr((_p)->u.inuse._domain)) #define page_set_owner(_p,_d) ((_p)->u.inuse._domain = pickle_domptr(_d)) diff --git a/xen/include/asm-x86/page.h b/xen/include/asm-x86/page.h index ac92b0c80e..250c076e85 100644 --- a/xen/include/asm-x86/page.h +++ b/xen/include/asm-x86/page.h @@ -123,13 +123,11 @@ static inline l2_pgentry_t l2e_from_paddr(paddr_t pa, unsigned int flags) ASSERT((pa & ~(PADDR_MASK & PAGE_MASK)) == 0); return (l2_pgentry_t) { pa | put_pte_flags(flags) }; } -#if CONFIG_PAGING_LEVELS >= 3 static inline l3_pgentry_t l3e_from_paddr(paddr_t pa, unsigned int flags) { ASSERT((pa & ~(PADDR_MASK & PAGE_MASK)) == 0); return (l3_pgentry_t) { pa | put_pte_flags(flags) }; } -#endif #if CONFIG_PAGING_LEVELS >= 4 static inline l4_pgentry_t l4e_from_paddr(paddr_t pa, unsigned int flags) { @@ -195,10 +193,7 @@ static inline l4_pgentry_t l4e_from_paddr(paddr_t pa, unsigned int flags) #ifndef __ASSEMBLY__ /* Page-table type. */ -#if CONFIG_PAGING_LEVELS == 2 -/* x86_32 default */ -typedef struct { u32 pfn; } pagetable_t; -#elif CONFIG_PAGING_LEVELS == 3 +#if CONFIG_PAGING_LEVELS == 3 /* x86_32 PAE */ typedef struct { u32 pfn; } pagetable_t; #elif CONFIG_PAGING_LEVELS == 4 @@ -251,12 +246,6 @@ void clear_page_sse2(void *); #endif /* !defined(__ASSEMBLY__) */ /* High table entries are reserved by the hypervisor. */ -#if defined(CONFIG_X86_32) && !defined(CONFIG_X86_PAE) -#define DOMAIN_ENTRIES_PER_L2_PAGETABLE \ - (HYPERVISOR_VIRT_START >> L2_PAGETABLE_SHIFT) -#define HYPERVISOR_ENTRIES_PER_L2_PAGETABLE \ - (L2_PAGETABLE_ENTRIES - DOMAIN_ENTRIES_PER_L2_PAGETABLE) -#else #define DOMAIN_ENTRIES_PER_L2_PAGETABLE 0 #define HYPERVISOR_ENTRIES_PER_L2_PAGETABLE 0 @@ -267,7 +256,6 @@ void clear_page_sse2(void *); #define HYPERVISOR_ENTRIES_PER_L4_PAGETABLE \ (L4_PAGETABLE_ENTRIES - GUEST_ENTRIES_PER_L4_PAGETABLE \ + DOMAIN_ENTRIES_PER_L4_PAGETABLE) -#endif /* Where to find each level of the linear mapping */ #define __linear_l1_table ((l1_pgentry_t *)(LINEAR_PT_VIRT_START)) @@ -284,8 +272,6 @@ extern root_pgentry_t idle_pg_table[ROOT_PAGETABLE_ENTRIES]; #if CONFIG_PAGING_LEVELS == 3 extern l2_pgentry_t idle_pg_table_l2[ ROOT_PAGETABLE_ENTRIES * L2_PAGETABLE_ENTRIES]; -#elif CONFIG_PAGING_LEVELS == 2 -#define idle_pg_table_l2 idle_pg_table #elif CONFIG_PAGING_LEVELS == 4 extern l2_pgentry_t *compat_idle_pg_table_l2; extern unsigned int m2p_compat_vstart; diff --git a/xen/include/asm-x86/types.h b/xen/include/asm-x86/types.h index 4a08b22df9..35b920c69b 100644 --- a/xen/include/asm-x86/types.h +++ b/xen/include/asm-x86/types.h @@ -36,15 +36,9 @@ typedef unsigned int u32; #if defined(__i386__) typedef signed long long s64; typedef unsigned long long u64; -#if defined(CONFIG_X86_PAE) typedef u64 paddr_t; #define INVALID_PADDR (~0ULL) #define PRIpaddr "016llx" -#else -typedef unsigned long paddr_t; -#define INVALID_PADDR (~0UL) -#define PRIpaddr "08lx" -#endif #elif defined(__x86_64__) typedef signed long s64; typedef unsigned long u64; diff --git a/xen/include/asm-x86/x86_32/page-2level.h b/xen/include/asm-x86/x86_32/page-2level.h deleted file mode 100644 index 79e25024b4..0000000000 --- a/xen/include/asm-x86/x86_32/page-2level.h +++ /dev/null @@ -1,60 +0,0 @@ -#ifndef __X86_32_PAGE_2LEVEL_H__ -#define __X86_32_PAGE_2LEVEL_H__ - -#define L1_PAGETABLE_SHIFT 12 -#define L2_PAGETABLE_SHIFT 22 -#define PAGE_SHIFT L1_PAGETABLE_SHIFT -#define ROOT_PAGETABLE_SHIFT L2_PAGETABLE_SHIFT - -#define PAGETABLE_ORDER 10 -#define L1_PAGETABLE_ENTRIES (1< - -/* read access (should only be used for debug printk's) */ -typedef u32 intpte_t; -#define PRIpte "08x" - -typedef struct { intpte_t l1; } l1_pgentry_t; -typedef struct { intpte_t l2; } l2_pgentry_t; -typedef l2_pgentry_t root_pgentry_t; - -#endif /* !__ASSEMBLY__ */ - -#define pte_read_atomic(ptep) (*(ptep)) -#define pte_write_atomic(ptep, pte) (*(ptep) = (pte)) -#define pte_write(ptep, pte) (*(ptep) = (pte)) - -/* root table */ -#define root_get_pfn l2e_get_pfn -#define root_get_flags l2e_get_flags -#define root_get_intpte l2e_get_intpte -#define root_empty l2e_empty -#define root_from_paddr l2e_from_paddr -#define PGT_root_page_table PGT_l2_page_table - -/* misc */ -#define is_guest_l1_slot(_s) (1) -#define is_guest_l2_slot(_d, _t,_s) ((_s) < L2_PAGETABLE_FIRST_XEN_SLOT) - -/* - * PTE pfn and flags: - * 20-bit pfn = (pte[31:12]) - * 12-bit flags = (pte[11:0]) - */ - -#define _PAGE_NX_BIT 0U -#define _PAGE_NX 0U - -/* Extract flags into 12-bit integer, or turn 12-bit flags into a pte mask. */ -#define get_pte_flags(x) ((int)(x) & 0xFFF) -#define put_pte_flags(x) ((intpte_t)((x) & 0xFFF)) - -#endif /* __X86_32_PAGE_2LEVEL_H__ */ diff --git a/xen/include/asm-x86/x86_32/page-3level.h b/xen/include/asm-x86/x86_32/page-3level.h deleted file mode 100644 index 1c326cf009..0000000000 --- a/xen/include/asm-x86/x86_32/page-3level.h +++ /dev/null @@ -1,90 +0,0 @@ -#ifndef __X86_32_PAGE_3LEVEL_H__ -#define __X86_32_PAGE_3LEVEL_H__ - -#define L1_PAGETABLE_SHIFT 12 -#define L2_PAGETABLE_SHIFT 21 -#define L3_PAGETABLE_SHIFT 30 -#define PAGE_SHIFT L1_PAGETABLE_SHIFT -#define ROOT_PAGETABLE_SHIFT L3_PAGETABLE_SHIFT - -#define PAGETABLE_ORDER 9 -#define L1_PAGETABLE_ENTRIES (1< - -/* read access (should only be used for debug printk's) */ -typedef u64 intpte_t; -#define PRIpte "016llx" - -typedef struct { intpte_t l1; } l1_pgentry_t; -typedef struct { intpte_t l2; } l2_pgentry_t; -typedef struct { intpte_t l3; } l3_pgentry_t; -typedef l3_pgentry_t root_pgentry_t; - -#endif /* !__ASSEMBLY__ */ - -#define pte_read_atomic(ptep) ({ \ - intpte_t __pte = *(ptep), __npte; \ - while ( (__npte = cmpxchg(ptep, __pte, __pte)) != __pte ) \ - __pte = __npte; \ - __pte; }) -#define pte_write_atomic(ptep, pte) do { \ - intpte_t __pte = *(ptep), __npte; \ - while ( (__npte = cmpxchg(ptep, __pte, (pte))) != __pte ) \ - __pte = __npte; \ -} while ( 0 ) -#define pte_write(ptep, pte) do { \ - u32 *__ptep_words = (u32 *)(ptep); \ - __ptep_words[0] = 0; \ - wmb(); \ - __ptep_words[1] = (pte) >> 32; \ - wmb(); \ - __ptep_words[0] = (pte) >> 0; \ -} while ( 0 ) - -/* root table */ -#define root_get_pfn l3e_get_pfn -#define root_get_flags l3e_get_flags -#define root_get_intpte l3e_get_intpte -#define root_empty l3e_empty -#define root_from_paddr l3e_from_paddr -#define PGT_root_page_table PGT_l3_page_table - -/* misc */ -#define is_guest_l1_slot(s) (1) -#define is_guest_l2_slot(d,t,s) \ - ( !((t) & PGT_pae_xen_l2) || \ - ((s) < (L2_PAGETABLE_FIRST_XEN_SLOT & (L2_PAGETABLE_ENTRIES - 1))) ) -#define is_guest_l3_slot(s) (1) - -/* - * PTE pfn and flags: - * 32-bit pfn = (pte[43:12]) - * 32-bit flags = (pte[63:44],pte[11:0]) - */ - -#define _PAGE_NX_BIT (1U<<31) -#define _PAGE_NX (cpu_has_nx ? _PAGE_NX_BIT : 0) - -/* Extract flags into 32-bit integer, or turn 32-bit flags into a pte mask. */ -#define get_pte_flags(x) (((int)((x) >> 32) & ~0xFFF) | ((int)(x) & 0xFFF)) -#define put_pte_flags(x) (((intpte_t)((x) & ~0xFFF) << 32) | ((x) & 0xFFF)) - -#define L3_DISALLOW_MASK 0xFFFFF1FEU /* must-be-zero */ - -#endif /* __X86_32_PAGE_3LEVEL_H__ */ diff --git a/xen/include/asm-x86/x86_32/page.h b/xen/include/asm-x86/x86_32/page.h index 42f163b409..6f32f99cda 100644 --- a/xen/include/asm-x86/x86_32/page.h +++ b/xen/include/asm-x86/x86_32/page.h @@ -2,6 +2,28 @@ #ifndef __X86_32_PAGE_H__ #define __X86_32_PAGE_H__ +#define L1_PAGETABLE_SHIFT 12 +#define L2_PAGETABLE_SHIFT 21 +#define L3_PAGETABLE_SHIFT 30 +#define PAGE_SHIFT L1_PAGETABLE_SHIFT +#define ROOT_PAGETABLE_SHIFT L3_PAGETABLE_SHIFT + +#define PAGETABLE_ORDER 9 +#define L1_PAGETABLE_ENTRIES (1< -#ifdef CONFIG_X86_PAE -# include -#else -# include -#endif - /* Given a virtual address, get an entry offset into a linear page table. */ #define l1_linear_offset(_a) ((_a) >> L1_PAGETABLE_SHIFT) #define l2_linear_offset(_a) ((_a) >> L2_PAGETABLE_SHIFT) #ifndef __ASSEMBLY__ + +#include +#include + +/* read access (should only be used for debug printk's) */ +typedef u64 intpte_t; +#define PRIpte "016llx" + +typedef struct { intpte_t l1; } l1_pgentry_t; +typedef struct { intpte_t l2; } l2_pgentry_t; +typedef struct { intpte_t l3; } l3_pgentry_t; +typedef l3_pgentry_t root_pgentry_t; + extern unsigned int PAGE_HYPERVISOR; extern unsigned int PAGE_HYPERVISOR_NOCACHE; + #endif +#define pte_read_atomic(ptep) ({ \ + intpte_t __pte = *(ptep), __npte; \ + while ( (__npte = cmpxchg(ptep, __pte, __pte)) != __pte ) \ + __pte = __npte; \ + __pte; }) +#define pte_write_atomic(ptep, pte) do { \ + intpte_t __pte = *(ptep), __npte; \ + while ( (__npte = cmpxchg(ptep, __pte, (pte))) != __pte ) \ + __pte = __npte; \ +} while ( 0 ) +#define pte_write(ptep, pte) do { \ + u32 *__ptep_words = (u32 *)(ptep); \ + __ptep_words[0] = 0; \ + wmb(); \ + __ptep_words[1] = (pte) >> 32; \ + wmb(); \ + __ptep_words[0] = (pte) >> 0; \ +} while ( 0 ) + +/* root table */ +#define root_get_pfn l3e_get_pfn +#define root_get_flags l3e_get_flags +#define root_get_intpte l3e_get_intpte +#define root_empty l3e_empty +#define root_from_paddr l3e_from_paddr +#define PGT_root_page_table PGT_l3_page_table + +/* misc */ +#define is_guest_l1_slot(s) (1) +#define is_guest_l2_slot(d,t,s) \ + ( !((t) & PGT_pae_xen_l2) || \ + ((s) < (L2_PAGETABLE_FIRST_XEN_SLOT & (L2_PAGETABLE_ENTRIES - 1))) ) +#define is_guest_l3_slot(s) (1) + +/* + * PTE pfn and flags: + * 32-bit pfn = (pte[43:12]) + * 32-bit flags = (pte[63:44],pte[11:0]) + */ + +#define _PAGE_NX_BIT (1U<<31) +#define _PAGE_NX (cpu_has_nx ? _PAGE_NX_BIT : 0) + +/* Extract flags into 32-bit integer, or turn 32-bit flags into a pte mask. */ +#define get_pte_flags(x) (((int)((x) >> 32) & ~0xFFF) | ((int)(x) & 0xFFF)) +#define put_pte_flags(x) (((intpte_t)((x) & ~0xFFF) << 32) | ((x) & 0xFFF)) + #define GRANT_PTE_FLAGS \ (_PAGE_PRESENT|_PAGE_ACCESSED|_PAGE_DIRTY|_PAGE_GNTTAB) @@ -40,6 +116,7 @@ extern unsigned int PAGE_HYPERVISOR_NOCACHE; #define L1_DISALLOW_MASK (BASE_DISALLOW_MASK | _PAGE_GNTTAB) #define L2_DISALLOW_MASK (BASE_DISALLOW_MASK) +#define L3_DISALLOW_MASK 0xFFFFF1FEU /* must-be-zero */ #endif /* __X86_32_PAGE_H__ */ diff --git a/xen/include/public/arch-x86/xen-x86_32.h b/xen/include/public/arch-x86/xen-x86_32.h index d62902e802..7cb6a0179f 100644 --- a/xen/include/public/arch-x86/xen-x86_32.h +++ b/xen/include/public/arch-x86/xen-x86_32.h @@ -74,6 +74,7 @@ #define MACH2PHYS_VIRT_END_PAE \ mk_unsigned_long(__MACH2PHYS_VIRT_END_PAE) +/* Non-PAE bounds are obsolete. */ #define __HYPERVISOR_VIRT_START_NONPAE 0xFC000000 #define __MACH2PHYS_VIRT_START_NONPAE 0xFC000000 #define __MACH2PHYS_VIRT_END_NONPAE 0xFC400000 @@ -84,15 +85,9 @@ #define MACH2PHYS_VIRT_END_NONPAE \ mk_unsigned_long(__MACH2PHYS_VIRT_END_NONPAE) -#ifdef CONFIG_X86_PAE #define __HYPERVISOR_VIRT_START __HYPERVISOR_VIRT_START_PAE #define __MACH2PHYS_VIRT_START __MACH2PHYS_VIRT_START_PAE #define __MACH2PHYS_VIRT_END __MACH2PHYS_VIRT_END_PAE -#else -#define __HYPERVISOR_VIRT_START __HYPERVISOR_VIRT_START_NONPAE -#define __MACH2PHYS_VIRT_START __MACH2PHYS_VIRT_START_NONPAE -#define __MACH2PHYS_VIRT_END __MACH2PHYS_VIRT_END_NONPAE -#endif #ifndef HYPERVISOR_VIRT_START #define HYPERVISOR_VIRT_START mk_unsigned_long(__HYPERVISOR_VIRT_START) -- cgit v1.2.3