From: Jeremy Fitzhardinge <jeremy@goop.org>
To: Yinghai Lu <yhlu.kernel@gmail.com>
Cc: Thomas Gleixner <tglx@linutronix.de>, 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 22:22:56 +0100 [thread overview]
Message-ID: <483C7BB0.6080901@goop.org> (raw)
In-Reply-To: <86802c440805271406l4348db33r5622c440b494baa2@mail.gmail.com>
Yinghai Lu wrote:
> Can you send out your boot log?
>
I've included it below.
> I still can not figure out INIT_PG_TABLE and RAMDISK could overlap? or
> only one byte? or the same page?
>
Perhaps my explanation in the patch description wasn't clear enough.
When Xen builds the domain, it's responsible for layout of the kernel,
the initrd and the initial pagetable (the kernel does not create its own
pagetable like it does when booting directly on x86).
The layout is (from low to high addresses):
kernel start ->+-------+
|.text |
+ - - - +
|.data |
+ - - - +
|.bss |
_end->+-------+
:padding:
+-------+<-ramdisk_image
: :
|initrd |
: :
+-------+<-ramdisk_end
:padding:
+-------+
|pgtable|
init_pg_tables_end->+-------+
Therefore, when you call early_reserve(&end, init_pg_tables_end) to
reserve the inital pagetable, you also implicitly reserve the whole
ramdisk area. Since your code currently reserves the ramdisk first, the
reservation of the pagetable fails because it overlaps the ramdisk.
My patch does two things:
1. reserve the initial pagetable first
2. skip reserving the ramdisk if it is within the pagetable range
This makes sure that all the important memory is reserved from early in
boot.
There are two alternate fixes:
1. try to precisely reserve *just* the pagetable, rather than
assuming it starts at &_end. I'm not sure there's currently a way
to do this, but it would be easy enough to add. Or,
2. Make early reservation cope with overlapping ranges, and deal with
them appropriately.
But for now, my patch prevents your code from causing a regression when
booting under Xen.
J
(early) Linux version 2.6.26-rc4 (jeremy@victim.goop.org) (gcc version 4.1.2 20070925 (Red Hat 4.1.2-33)) #502 SMP PREEMPT Tue May 27 13:37:29 PDT 2008
(early) ACPI in unprivileged domain disabled
(early) BIOS-provided physical RAM map:
(early) Xen: 0000000000000000 - 000000000009f000 (usable)
(early) Xen: 0000000000100000 - 0000000010000000 (usable)
(early) console [xenboot0] enabled
(early) debug: ignoring loglevel setting.
(early) limit_regions start: 0000000000000000 - 000000000009f000 (usable)
(early) limit_regions start: 0000000000100000 - 0000000010000000 (usable)
(early) limit_regions endfunc: 0000000000000000 - 000000000009f000 (usable)
(early) limit_regions endfunc: 0000000000100000 - 0000000010000000 (usable)
(early) user-defined physical RAM map:
(early) user: 0000000000000000 - 000000000009f000 (usable)
(early) user: 0000000000100000 - 0000000010000000 (usable)
(early) 0MB HIGHMEM available.
(early) 256MB LOWMEM available.
(early) low ram: 01036000 - 10000000
(early) bootmap 01036000 - 01038000
(early) early res: 0 [0-fff] BIOS data page
(early) early res: 1 [1000-1fff] EX TRAMPOLINE
(early) early res: 2 [6000-6fff] TRAMPOLINE
(early) early res: 3 [100000-970c1b] TEXT DATA BSS
(early) early res: 4 [970c1c-1035fff] INIT_PG_TABLE
(early) early res: 5 [1036000-1037fff] BOOTMAP
(early) Scan SMP from c0000000 for 1024 bytes.
(early) Scan SMP from c009fc00 for 1024 bytes.
(early) Scan SMP from c00f0000 for 65536 bytes.
(early) Scan SMP from c00c2c20 for 1024 bytes.
(early) NX (Execute Disable) protection: active
(early) Entering add_active_range(0, 0, 65536) 0 entries of 256 used
(early) Zone PFN ranges:
(early) DMA 0 -> 4096
(early) Normal 4096 -> 65536
(early) HighMem 65536 -> 65536
(early) Movable zone start PFN for each node
(early) early_node_map[1] active PFN ranges
(early) 0: 0 -> 65536
(early) On node 0 totalpages: 65536
(early) DMA zone: 56 pages used for memmap
(early) DMA zone: 0 pages reserved
(early) DMA zone: 4040 pages, LIFO batch:0
(early) Normal zone: 840 pages used for memmap
(early) Normal zone: 60600 pages, LIFO batch:15
(early) HighMem zone: 0 pages used for memmap
(early) Movable zone: 0 pages used for memmap
next prev parent reply other threads:[~2008-05-27 21:23 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
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 [this message]
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=483C7BB0.6080901@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