[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH] linux: eliminate E820 tables


  • To: xen-devel@xxxxxxxxxxxxxxxxxxx
  • From: "Andrew D. Ball" <aball@xxxxxxxxxx>
  • Date: Wed, 17 May 2006 10:34:42 -0400
  • Delivery-date: Wed, 17 May 2006 07:35:06 -0700
  • List-id: Xen developer discussion <xen-devel.lists.xensource.com>

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;
+#endif
extern 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_XEN
 static 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;
+#endif
if ((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_XEN
                else if (!memcmp(from, "memmap=", 7)) {
                        if (to != command_line)
                                to--;
@@ -836,6 +841,7 @@ static void __init parse_cmdline_early (
                                }
                        }
                }
+#endif
else 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 star
return 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());
        }
+#endif
copy_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 l
        e820.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_XEN
 void __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_XEN
 void __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;
+#endif
extern 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;
+#endif
for (;;) { if (c != ' ') @@ -401,6 +402,7 @@ static __init void parse_cmdline_early (
                if (!memcmp(from, "mem=", 4))
parse_memopt(from+4, &from); +#ifndef CONFIG_XEN
                if (!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_NUMA
                if (!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


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.