Index: 2006-01-05/arch/x86_64/kernel/setup-xen.c =================================================================== --- 2006-01-05.orig/arch/x86_64/kernel/setup-xen.c 2006-01-10 11:33:22.067884344 +0100 +++ 2006-01-05/arch/x86_64/kernel/setup-xen.c 2006-01-10 11:44:18.011165808 +0100 @@ -64,12 +64,13 @@ #ifdef CONFIG_XEN #include #include -#include "setup_arch_pre.h" #include #define PFN_UP(x) (((x) + PAGE_SIZE-1) >> PAGE_SHIFT) #define PFN_PHYS(x) ((x) << PAGE_SHIFT) #define end_pfn_map end_pfn -#include + +extern void hypervisor_callback(void); +extern void failsafe_callback(void); extern unsigned long start_pfn; extern struct edid_info edid_info; @@ -627,10 +628,23 @@ void __init setup_arch(char **cmdline_p) rd_doload = ((RAMDISK_FLAGS & RAMDISK_LOAD_FLAG) != 0); #endif +#ifdef CONFIG_XEN HYPERVISOR_vm_assist(VMASST_CMD_enable, VMASST_TYPE_writable_pagetables); - ARCH_SETUP + HYPERVISOR_set_callbacks( + (unsigned long) hypervisor_callback, + (unsigned long) failsafe_callback, + (unsigned long) system_call); + + clear_bit(X86_FEATURE_VME, boot_cpu_data.x86_capability); + clear_bit(X86_FEATURE_DE, boot_cpu_data.x86_capability); + clear_bit(X86_FEATURE_PSE, boot_cpu_data.x86_capability); + clear_bit(X86_FEATURE_PGE, boot_cpu_data.x86_capability); + clear_bit(X86_FEATURE_SEP, boot_cpu_data.x86_capability); + if (!(xen_start_info->flags & SIF_PRIVILEGED)) + clear_bit(X86_FEATURE_MTRR, boot_cpu_data.x86_capability); +#endif if (!MOUNT_ROOT_RDONLY) root_mountflags &= ~MS_RDONLY; Index: 2006-01-05/include/asm-x86_64/mach-xen/setup_arch_post.h =================================================================== --- 2006-01-05.orig/include/asm-x86_64/mach-xen/setup_arch_post.h 2006-01-10 11:33:22.069884040 +0100 +++ /dev/null 1970-01-01 00:00:00.000000000 +0000 @@ -1,47 +0,0 @@ -/** - * machine_specific_memory_setup - Hook for machine specific memory setup. - * - * Description: - * This is included late in kernel/setup.c so that it can make - * use of all of the static functions. - **/ - -static char * __init machine_specific_memory_setup(void) -{ - char *who; - unsigned long start_pfn, max_pfn; - - who = "Xen"; - - start_pfn = 0; - max_pfn = xen_start_info->nr_pages; - - e820.nr_map = 0; - add_memory_region(PFN_PHYS(start_pfn), PFN_PHYS(max_pfn) - PFN_PHYS(start_pfn), E820_RAM); - - return who; -} - -void __init machine_specific_modify_cpu_capabilities(struct cpuinfo_x86 *c) -{ - clear_bit(X86_FEATURE_VME, c->x86_capability); - clear_bit(X86_FEATURE_DE, c->x86_capability); - clear_bit(X86_FEATURE_PSE, c->x86_capability); - clear_bit(X86_FEATURE_PGE, c->x86_capability); - clear_bit(X86_FEATURE_SEP, c->x86_capability); - if (!(xen_start_info->flags & SIF_PRIVILEGED)) - clear_bit(X86_FEATURE_MTRR, c->x86_capability); -} - -extern void hypervisor_callback(void); -extern void failsafe_callback(void); - -static void __init machine_specific_arch_setup(void) -{ - HYPERVISOR_set_callbacks( - (unsigned long) hypervisor_callback, - (unsigned long) failsafe_callback, - (unsigned long) system_call); - - machine_specific_modify_cpu_capabilities(&boot_cpu_data); -} Index: 2006-01-05/include/asm-x86_64/mach-xen/setup_arch_pre.h =================================================================== --- 2006-01-05.orig/include/asm-x86_64/mach-xen/setup_arch_pre.h 2006-01-10 11:33:22.069884040 +0100 +++ /dev/null 1970-01-01 00:00:00.000000000 +0000 @@ -1,5 +0,0 @@ -/* Hook to call BIOS initialisation function */ - -#define ARCH_SETUP machine_specific_arch_setup(); - -static void __init machine_specific_arch_setup(void);