All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jeremy Fitzhardinge <jeremy@goop.org>
To: Thomas Gleixner <tglx@linutronix.de>
Cc: Yinghai Lu <yhlu.kernel@gmail.com>, Ingo Molnar <mingo@elte.hu>,
	"H. Peter Anvin" <hpa@zytor.com>,
	Andrew Morton <akpm@linux-foundation.org>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH] x86: extend e820 ealy_res support 32bit - fix #2
Date: Tue, 27 May 2008 21:37:13 +0100	[thread overview]
Message-ID: <483C70F9.2030901@goop.org> (raw)
In-Reply-To: <alpine.LFD.1.10.0805271744080.3295@apollo.tec.linutronix.de>

Thomas Gleixner wrote:
> On Sun, 25 May 2008, Yinghai Lu wrote:
>   
>> remove extra -1 in reseve_early calling
>>     panic if can not find space for new RAMDISK
>>
>>     
>
> Thanks, applied on top of the v2 update
>
> 	tglx
>   
This patch is still required to make Xen boot with the e820 changes:

Subject: xen: boot via i386_start_kernel to get early reservations

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
  inital 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;
 



  reply	other threads:[~2008-05-27 20:38 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         ` [PATCH] xen: boot via i386_start_kernel to get early reservations Jeremy Fitzhardinge
2008-05-24 22:04           ` 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 [this message]
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=483C70F9.2030901@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.