[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH] linux: eliminate E820 tables
Jan Beulich wrote: .. to make clear that no relevant state is actually maintained in there and that, as a consequence, adjustments to native Linux code in this area aren't applicable to the Xen kernels. In dom0, I like to read the system memory map from the kernel message buffer. Does your patch make this no longer work? Thanks. Andrew Signed-off-by: Jan Beulich <jbeulich@xxxxxxxxxx> ------------------------------------------------------------------------ Index: head-2006-05-03/arch/i386/kernel/setup-xen.c =================================================================== --- head-2006-05-03.orig/arch/i386/kernel/setup-xen.c 2006-05-08 16:04:28.000000000 +0200 +++ head-2006-05-03/arch/i386/kernel/setup-xen.c 2006-05-08 16:09:21.000000000 +0200 @@ -157,7 +157,9 @@ struct ist_info ist_info; defined(CONFIG_X86_SPEEDSTEP_SMI_MODULE) EXPORT_SYMBOL(ist_info); #endif +#ifndef CONFIG_XEN struct e820map e820; +#endifextern void early_cpu_init(void);extern void generic_apic_probe(char *); @@ -399,6 +401,7 @@ EXPORT_SYMBOL(phys_to_machine_mapping); start_info_t *xen_start_info; EXPORT_SYMBOL(xen_start_info);+#ifndef CONFIG_XENstatic void __init limit_regions(unsigned long long size) { unsigned long long current_addr = 0; @@ -492,7 +495,6 @@ static void __init print_memory_map(char } }-#if 0/* * Sanitize the BIOS e820 map. * @@ -747,7 +749,9 @@ static void __init parse_cmdline_early ( { char c = ' ', *to = command_line, *from = saved_command_line; int len = 0, max_cmdline; +#ifndef CONFIG_XEN int userdef = 0; +#endifif ((max_cmdline = MAX_GUEST_CMDLINE) > COMMAND_LINE_SIZE)max_cmdline = COMMAND_LINE_SIZE; @@ -795,6 +799,7 @@ static void __init parse_cmdline_early ( } }+#ifndef CONFIG_XENelse if (!memcmp(from, "memmap=", 7)) { if (to != command_line) to--; @@ -836,6 +841,7 @@ static void __init parse_cmdline_early ( } } } +#endifelse if (!memcmp(from, "noexec=", 7))noexec_setup(from + 7); @@ -978,10 +984,12 @@ static void __init parse_cmdline_early ( } *to = '\0'; *cmdline_p = command_line; +#ifndef CONFIG_XEN if (userdef) { printk(KERN_INFO "user-defined physical RAM map:\n"); print_memory_map("user"); } +#endif }#if 0 /* !XEN */@@ -1111,6 +1119,7 @@ unsigned long __init find_max_low_pfn(vo return max_low_pfn; }+#ifndef CONFIG_XEN/* * Free all available memory for boot time allocation. Used * as a callback function by efi_memory_walk() @@ -1129,11 +1138,14 @@ free_available_memory(unsigned long starreturn 0;} +#endif + /* * Register fully available low RAM pages with the bootmem allocator. */ static void __init register_bootmem_low_pages(unsigned long max_low_pfn) { +#ifndef CONFIG_XEN int i;if (efi_enabled) {@@ -1171,6 +1183,13 @@ static void __init register_bootmem_low_ size = last_pfn - curr_pfn; free_bootmem(PFN_PHYS(curr_pfn), PFN_PHYS(size)); } +#else + unsigned long size = xen_start_info->nr_pages; + + if (size > max_low_pfn) + size = max_low_pfn; + free_bootmem(0, PFN_PHYS(size)); +#endif }#ifndef CONFIG_XEN@@ -1699,12 +1718,14 @@ void __init setup_arch(char **cmdline_p) setup_xen_features();ARCH_SETUP+#ifndef CONFIG_XEN if (efi_enabled) efi_init(); else { printk(KERN_INFO "BIOS-provided physical RAM map:\n"); print_memory_map(machine_specific_memory_setup()); } +#endifcopy_edd(); Index: head-2006-05-03/arch/x86_64/kernel/e820-xen.c=================================================================== --- head-2006-05-03.orig/arch/x86_64/kernel/e820-xen.c 2006-05-03 09:39:54.000000000 +0200 +++ head-2006-05-03/arch/x86_64/kernel/e820-xen.c 2006-05-08 16:04:28.000000000 +0200 @@ -36,6 +36,7 @@ EXPORT_SYMBOL(end_pfn);unsigned long end_user_pfn = MAXMEM>>PAGE_SHIFT; unsigned long end_pfn_map; +#ifndef CONFIG_XEN /* * Add a memory region to the kernel e820 map. */ @@ -54,8 +55,6 @@ void __init add_memory_region(unsigned le820.nr_map++; }-#ifndef CONFIG_XEN-/* * end_pfn only includes RAM, while end_pfn_map includes all e820 entries.* The direct mapping extends to end_pfn_map, so that we can directly access @@ -278,6 +279,7 @@ int __init e820_all_mapped(unsigned long } #endif /* CONFIG_XEN */+#ifndef CONFIG_XENvoid __init e820_print_map(char *who) { int i; @@ -304,7 +304,6 @@ void __init e820_print_map(char *who) } }-#ifndef CONFIG_XEN/* * Sanitize the BIOS e820 map. * @@ -562,7 +561,8 @@ void __init setup_memory_region(void)#else /* CONFIG_XEN */ -extern unsigned long xen_override_max_pfn;+/* Allows setting of maximum possible memory size */ +static unsigned long xen_override_max_pfn; extern union xen_start_info_union xen_start_info_union;unsigned long __init e820_end_of_ram(void)@@ -662,6 +662,7 @@ void __init parse_memopt(char *p, char * xen_override_max_pfn = (unsigned long) end_user_pfn;} +#ifndef CONFIG_XENvoid __init parse_memmapopt(char *p, char **from) { unsigned long long start_at, mem_size; @@ -682,6 +683,7 @@ void __init parse_memmapopt(char *p, cha } p = *from; } +#endif/** Search for the biggest gap in the low 32 bits of the e820 Index: head-2006-05-03/arch/x86_64/kernel/setup-xen.c =================================================================== --- head-2006-05-03.orig/arch/x86_64/kernel/setup-xen.c 2006-05-08 16:04:28.000000000 +0200 +++ head-2006-05-03/arch/x86_64/kernel/setup-xen.c 2006-05-08 16:11:01.000000000 +0200 @@ -88,9 +88,6 @@ EXPORT_SYMBOL(HYPERVISOR_shared_info); extern char hypercall_page[PAGE_SIZE]; EXPORT_SYMBOL(hypercall_page);-/* Allows setting of maximum possible memory size */-unsigned long xen_override_max_pfn; - static int xen_panic_event(struct notifier_block *, unsigned long, void *); static struct notifier_block xen_panic_block = { xen_panic_event, NULL, 0 /* try to go last */ @@ -142,7 +139,9 @@ struct sys_desc_table_struct { };struct edid_info edid_info;+#ifndef CONFIG_XEN struct e820map e820; +#endifextern int root_mountflags; @@ -321,7 +320,9 @@ static __init void parse_cmdline_early ({ char c = ' ', *to = command_line, *from = COMMAND_LINE; int len = 0; +#ifndef CONFIG_XEN int userdef = 0; +#endiffor (;;) { if (c != ' ') @@ -401,6 +402,7 @@ static __init void parse_cmdline_early (if (!memcmp(from, "mem=", 4))parse_memopt(from+4, &from); +#ifndef CONFIG_XENif (!memcmp(from, "memmap=", 7)) { /* exactmap option is for used defined memory */ if (!memcmp(from+7, "exactmap", 8)) { @@ -422,6 +424,7 @@ static __init void parse_cmdline_early ( userdef = 1; } } +#endif#ifdef CONFIG_NUMAif (!memcmp(from, "numa=", 5)) @@ -481,10 +484,12 @@ static __init void parse_cmdline_early ( break; *(to++) = c; } +#ifndef CONFIG_XEN if (userdef) { printk(KERN_INFO "user-defined physical RAM map:\n"); e820_print_map("user"); } +#endif *to = '\0'; *cmdline_p = command_line; } Index: head-2006-05-03/include/asm-i386/mach-xen/setup_arch_post.h =================================================================== --- head-2006-05-03.orig/include/asm-i386/mach-xen/setup_arch_post.h 2006-04-24 11:43:43.000000000 +0200 +++ head-2006-05-03/include/asm-i386/mach-xen/setup_arch_post.h 2006-05-08 16:04:28.000000000 +0200 @@ -1,6 +1,4 @@ /** - * 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. @@ -8,16 +8,6 @@#include <xen/interface/callback.h> -static char * __init machine_specific_memory_setup(void)-{ - unsigned long max_pfn = xen_start_info->nr_pages; - - e820.nr_map = 0; - add_memory_region(0, PFN_PHYS(max_pfn), E820_RAM); - - return "Xen"; -} - extern void hypervisor_callback(void); extern void failsafe_callback(void); extern void nmi(void); Index: head-2006-05-03/include/asm-i386/mach-xen/setup_arch_pre.h =================================================================== --- head-2006-05-03.orig/include/asm-i386/mach-xen/setup_arch_pre.h 2006-04-24 11:43:43.000000000 +0200 +++ head-2006-05-03/include/asm-i386/mach-xen/setup_arch_pre.h 2006-05-08 16:04:28.000000000 +0200 @@ -3,3 +3,9 @@ #define ARCH_SETUP machine_specific_arch_setup();static void __init machine_specific_arch_setup(void);+ +static inline char * machine_specific_memory_setup(void) +{ + return "Xen"; +} + ------------------------------------------------------------------------ _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |