[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [RFC PATCH 17/33] Support loading an initrd when running on Xen
Due to the initial physical memory layout when booting on Xen, the initrd image ends up below min_low_pfn (as registered with the bootstrap memory allocator). Add Xen subarch support to enable initrd_below_start_ok flag, and disable initrd_reserve_bootmem. Signed-off-by: Ian Pratt <ian.pratt@xxxxxxxxxxxxx> Signed-off-by: Christian Limpach <Christian.Limpach@xxxxxxxxxxxx> Signed-off-by: Chris Wright <chrisw@xxxxxxxxxxxx> --- arch/i386/kernel/setup.c | 4 +++- include/asm-i386/mach-xen/setup_arch_post.h | 6 ++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff -r f4c730a90338 arch/i386/kernel/setup.c --- a/arch/i386/kernel/setup.c Tue Jun 13 23:54:44 2006 -0700 +++ b/arch/i386/kernel/setup.c Wed Jun 14 00:02:16 2006 -0700 @@ -1205,6 +1205,7 @@ extern unsigned long __init setup_memory extern unsigned long __init setup_memory(void); extern void zone_sizes_init(void); #endif /* !CONFIG_NEED_MULTIPLE_NODES */ +int initrd_reserve_bootmem = 1; void __init setup_bootmem_allocator(void) { @@ -1265,7 +1266,8 @@ void __init setup_bootmem_allocator(void #ifdef CONFIG_BLK_DEV_INITRD if (LOADER_TYPE && INITRD_START) { if (INITRD_START + INITRD_SIZE <= (max_low_pfn << PAGE_SHIFT)) { - reserve_bootmem(INITRD_START, INITRD_SIZE); + if (initrd_reserve_bootmem) + reserve_bootmem(INITRD_START, INITRD_SIZE); initrd_start = INITRD_START ? INITRD_START + PAGE_OFFSET : 0; initrd_end = initrd_start+INITRD_SIZE; diff -r f4c730a90338 arch/i386/mach-xen/setup-xen.c --- a/arch/i386/mach-xen/setup-xen.c Tue Jun 13 23:54:44 2006 -0700 +++ b/arch/i386/mach-xen/setup-xen.c Wed Jun 14 00:02:16 2006 -0700 @@ -5,6 +5,8 @@ #include <linux/config.h> #include <linux/module.h> #include <linux/mm.h> +#include <linux/bootmem.h> +#include <linux/initrd.h> #include <asm/e820.h> #include <asm/setup.h> @@ -68,4 +70,10 @@ void __init machine_specific_arch_setup( memcpy(saved_command_line, xen_start_info->cmd_line, MAX_GUEST_CMDLINE > COMMAND_LINE_SIZE ? COMMAND_LINE_SIZE : MAX_GUEST_CMDLINE); + + if (INITRD_START && + INITRD_START + PAGE_OFFSET < min_low_pfn << PAGE_SHIFT) { + initrd_reserve_bootmem = 0; + initrd_below_start_ok = 1; + } } diff -r f4c730a90338 include/asm-i386/setup.h --- a/include/asm-i386/setup.h Tue Jun 13 23:54:44 2006 -0700 +++ b/include/asm-i386/setup.h Wed Jun 14 00:02:16 2006 -0700 @@ -66,6 +66,7 @@ extern unsigned char boot_params[PARAM_S #define LOWMEMSIZE() (0x9f000) extern unsigned long init_pg_tables_end; +extern int initrd_reserve_bootmem; struct e820entry; -- _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |