From: Jeremy Fitzhardinge <jeremy@goop.org>
To: Yinghai Lu <yhlu.kernel@gmail.com>
Cc: Ingo Molnar <mingo@elte.hu>, Thomas Gleixner <tglx@linutronix.de>,
"H. Peter Anvin" <hpa@zytor.com>,
Andrew Morton <akpm@linux-foundation.org>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>
Subject: [PATCH] xen: boot via i386_start_kernel to get early reservations
Date: Sat, 24 May 2008 10:49:51 +0100 [thread overview]
Message-ID: <4837E4BF.6050604@goop.org> (raw)
In-Reply-To: <4837D7DD.7000204@goop.org>
Boot Xen via i386_start_kernel so that all the early reservations are
made properly; without these, it will start using the kernel and
pagetables as early heap memory, which is a bit suboptimal.
One tricky part is that reserve_early() will just panic if any of the
early reservations overlap any others. When a Xen domain is built, it
constructs the initial address space as:
kernel text+data+bss
initrd
initial pagetable
Therefore, when reserving the pagetable (from &_end to
init_pg_tables_end), it covers the whole initrd area. If it then
tries to reserve the initrd, it will panic because of the overlap.
The simple fix here is to reserve INIT_PG_TABLE first, and then only
reserve the ramdisk if it doesn't overlap with the previous
reservations. A better/more complex fix might be to make
reserve_early() deal with overlapping reservations.
Signed-off-by: Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>
---
arch/x86/kernel/head32.c | 6 ++++--
arch/x86/xen/enlighten.c | 2 +-
include/asm-x86/setup.h | 1 +
3 files changed, 6 insertions(+), 3 deletions(-)
===================================================================
--- a/arch/x86/kernel/head32.c
+++ b/arch/x86/kernel/head32.c
@@ -66,6 +66,7 @@ void __init i386_start_kernel(void)
void __init i386_start_kernel(void)
{
reserve_early(__pa_symbol(&_text), __pa_symbol(&_end), "TEXT DATA BSS");
+ reserve_early(__pa_symbol(&_end), init_pg_tables_end, "INIT_PG_TABLE");
#ifdef CONFIG_BLK_DEV_INITRD
/* Reserve INITRD */
@@ -73,10 +74,11 @@ void __init i386_start_kernel(void)
u64 ramdisk_image = boot_params.hdr.ramdisk_image;
u64 ramdisk_size = boot_params.hdr.ramdisk_size;
u64 ramdisk_end = ramdisk_image + ramdisk_size;
- reserve_early(ramdisk_image, ramdisk_end, "RAMDISK");
+ if (ramdisk_end <= __pa_symbol(&_text) ||
+ ramdisk_image > init_pg_tables_end)
+ reserve_early(ramdisk_image, ramdisk_end, "RAMDISK");
}
#endif
- reserve_early(__pa_symbol(&_end), init_pg_tables_end, "INIT_PG_TABLE");
reserve_ebda_region();
===================================================================
--- a/arch/x86/xen/enlighten.c
+++ b/arch/x86/xen/enlighten.c
@@ -1264,5 +1264,5 @@ asmlinkage void __init xen_start_kernel(
}
/* Start the world */
- start_kernel();
+ i386_start_kernel();
}
===================================================================
--- a/include/asm-x86/setup.h
+++ b/include/asm-x86/setup.h
@@ -58,6 +58,7 @@ int __init copy_e820_map(struct e820entr
int __init copy_e820_map(struct e820entry *biosmap, int nr_map);
void __init add_memory_region(unsigned long long start,
unsigned long long size, int type);
+void __init i386_start_kernel(void);
extern unsigned long init_pg_tables_end;
next prev parent reply other threads:[~2008-05-24 9:50 UTC|newest]
Thread overview: 51+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-05-11 7:30 [PATCH] x86: make e820.c to have common functions Yinghai Lu
2008-05-13 13:05 ` Ingo Molnar
2008-05-13 17:35 ` Yinghai Lu
2008-05-18 8:18 ` [PATCH] x86: extend e820 ealy_res support 32bit Yinghai Lu
2008-05-21 3:10 ` [PATCH] x86: move e820_mark_nosave_regions to e820.c Yinghai Lu
2008-05-22 1:40 ` [PATCH] x86: extend e820 ealy_res support 32bit - fix Yinghai Lu
2008-05-22 10:12 ` Jeremy Fitzhardinge
2008-05-22 17:58 ` Yinghai Lu
2008-05-22 22:20 ` [PATCH] x86: extend e820 ealy_res support 32bit - fix v2 Yinghai Lu
2008-05-23 23:08 ` Yinghai Lu
2008-05-23 23:32 ` Jeremy Fitzhardinge
2008-05-23 23:38 ` Jeremy Fitzhardinge
2008-05-24 0:01 ` Yinghai Lu
2008-05-24 0:09 ` Yinghai Lu
2008-05-24 8:54 ` Jeremy Fitzhardinge
2008-05-24 9:49 ` Jeremy Fitzhardinge [this message]
2008-05-24 22:04 ` [PATCH] xen: boot via i386_start_kernel to get early reservations Yinghai Lu
2008-05-24 19:57 ` [PATCH] x86: extend e820 ealy_res support 32bit - fix v2 Yinghai Lu
2008-05-25 17:00 ` [PATCH] x86: extend e820 ealy_res support 32bit - fix #2 Yinghai Lu
2008-05-27 15:44 ` Thomas Gleixner
2008-05-27 20:37 ` Jeremy Fitzhardinge
2008-05-27 20:58 ` Thomas Gleixner
2008-05-27 21:06 ` Jeremy Fitzhardinge
2008-05-27 21:06 ` Yinghai Lu
2008-05-27 21:22 ` Jeremy Fitzhardinge
2008-05-27 21:35 ` Yinghai Lu
2008-05-27 21:47 ` Jeremy Fitzhardinge
2008-05-27 22:52 ` Yinghai Lu
2008-05-28 10:01 ` Jeremy Fitzhardinge
2008-05-28 20:48 ` Yinghai Lu
2008-05-28 21:24 ` Jeremy Fitzhardinge
2008-05-29 13:37 ` Jeremy Fitzhardinge
2008-05-29 18:41 ` Yinghai Lu
2008-05-29 18:58 ` H. Peter Anvin
2008-05-29 18:52 ` Yinghai Lu
2008-05-29 19:14 ` Yinghai Lu
2008-05-30 15:50 ` Jeremy Fitzhardinge
2008-05-29 19:56 ` [PATCH] x86: extend e820 early_res support 32bit -fix #3 Yinghai Lu
2008-05-29 19:57 ` [PATCH] x86: extend e820 early_res support 32bit -fix #4 Yinghai Lu
2008-05-29 19:58 ` [PATCH] x86: extend e820 early_res support 32bit -fix #5 Yinghai Lu
2008-05-29 23:25 ` [PATCH] x86: 32bit numa srat fix early_ioremap leak Yinghai Lu
2008-05-31 8:01 ` Ingo Molnar
2008-06-01 5:51 ` [PATCH] x86: 32bit numa increase max_elements to 1024 Yinghai Lu
2008-06-01 5:52 ` [PATCH] x86: change propagate_e820_map back to find_max_pfn -32bit Yinghai Lu
2008-06-01 5:53 ` [PATCH] x86: set node_remap_size[0] in fallback path Yinghai Lu
2008-06-01 5:56 ` [PATCH] x86: numa_32 print out debug info all kva Yinghai Lu
2008-06-01 20:15 ` [PATCH] x86: numa_32 print out debug info all kva v2 Yinghai Lu
2008-06-03 2:16 ` [PATCH] x86: change propagate_e820_map back to find_max_pfn -32bit -v2 Yinghai Lu
2008-06-02 4:06 ` [PATCH] x86: numa_32 avoid clash between ramdisk and kva Yinghai Lu
2008-06-02 6:53 ` [PATCH] x86: cleanup max_pfn_mapped usage - 32bit Yinghai Lu
2008-06-02 6:55 ` [PATCH] x86: cleanup max_pfn_mapped usage - 64bit Yinghai Lu
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4837E4BF.6050604@goop.org \
--to=jeremy@goop.org \
--cc=akpm@linux-foundation.org \
--cc=hpa@zytor.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=tglx@linutronix.de \
--cc=yhlu.kernel@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox