public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Yinghai Lu <yinghai@kernel.org>
To: Stefan Hellermann <stefan@the2masters.de>
Cc: linux-kernel@vger.kernel.org
Subject: Re: early crash on ancient tablet related to no-bootmem
Date: Thu, 05 May 2011 23:30:39 -0700	[thread overview]
Message-ID: <4DC3958F.1090800@kernel.org> (raw)
In-Reply-To: <4DC328AC.1060906@the2masters.de>

On 05/05/2011 03:46 PM, Stefan Hellermann wrote:
> Am 06.05.2011 00:06, schrieb Yinghai Lu:
>>
>> can you please boot with "ignore_loglevel debug memblock=debug"?
>>
> 
> Here we are:
> 
> early console in setup code
> early console in decompress_kernel
> 
> Decompressing Linux... Parsing ELF... done.
> Booting the kernel.
> Linux version 2.6.39-rc6+ (stefan@hel-stefan.lan) (gcc version 4.6.0
> 20110428 (Red Hat 4.6.0-6) (GCC) ) #1 Thu May 5 19:21:50 CEST 2011
> BIOS-provided physical RAM map:
>  BIOS-88: 0000000000000000 - 000000000009f000 (usable)
>  BIOS-88: 0000000000100000 - 0000000000840000 (usable)
> bootconsole [earlyser0] enabled
> debug: ignoring loglevel setting.
> Notice: NX (Execute Disable) protection missing in CPU!
> DMI not present or invalid.
> e820 update range: 0000000000000000 - 0000000000010000 (usable) ==>
> (reserved)
> e820 remove range: 00000000000a0000 - 0000000000100000 (usable)
> last_pfn = 0x840 max_arch_pfn = 0x100000
>     memblock_x86_reserve_range: [0x003a5000-0x003a6fff]              BRK
> MEMBLOCK configuration:
>  memory size = 0x7cf000
>  memory.cnt  = 0x2
>  memory[0x0]	[0x00000000010000-0x0000000009efff], 0x8f000 bytes
>  memory[0x1]	[0x00000000100000-0x0000000083ffff], 0x740000 bytes
>  reserved.cnt  = 0x1
>  reserved[0x0]	[0x0000000009f000-0x000000003a6fff], 0x308000 bytes
> initial memory mapped : 0 - 00800000
>     memblock_x86_reserve_range: [0x0009e000-0x0009efff]       TRAMPOLINE
> Base memory trampoline at [c009e000] 9e000 size 4096
> init_memory_mapping: 0000000000000000-0000000000840000
>  0000000000 - 0000840000 page 4k
> kernel direct mapping tables up to 840000 @ 7fa000-800000
>     memblock_x86_reserve_range: [0x007fa000-0x007fafff]          PGTABLE
> 8MB LOWMEM available.
>   mapped low ram: 0 - 00840000
>   low ram: 0 - 00840000
> Zone PFN ranges:
>   DMA      0x00000010 -> 0x00001000
>   Normal   empty
> Movable zone start PFN for each node
> early_node_map[2] active PFN ranges
>     0: 0x00000010 -> 0x0000009f
>     0: 0x00000100 -> 0x00000840
> On node 0 totalpages: 1999
> free_area_init_node: node 0, pgdat c03555a0, node_mem_map 00000200
>   DMA zone: 17 pages used for memmap
>   DMA zone: 0 pages reserved
>   DMA zone: 1982 pages, LIFO batch:0
> BUG: Int 6: CR2   (null)
>      EDI c0355868  ESI   (null)  EBP 00000830  ESP c0339f10
>      EBX c03555a0  EDX 00000006  ECX 01000000  EAX fffffff4
>      err   (null)  EIP c0361b85   CS 00000060  flg 00010082
> Stack:   (null) c031d2f2 000007be   (null) c031d2f2 00000003   (null)
> (null)
>        00000010 00000018 00000002   (null) 00000002 c0361ea8   (null)
> (null)
>        00000100 00000840 00000001   (null)   (null) c0339f8c c0339fb8
> c035e41b
> Pid: 0, comm: swapper Not tainted 2.6.39-rc6+ #1
> Call Trace:
>  [<c036edb5>] ? 0xc036edb5
>  [<c0361b85>] ? 0xc0361b85
>  [<c0361ea8>] ? 0xc0361ea8
>  [<c035e41b>] ? 0xc035e41b
>  [<c035986d>] ? 0xc035986d
>  [<c0358401>] ? 0xc0358401


please check

[PATCH] mm: Use alloc_bootmem_node_nopanic on really needed path

Stefan found nobootmem does not work on his system that only have 8M ram.

It turns out we should ignore the low limit the 16M.

Use alloc_bootmem_node_nopanic in those calling.

Reported-by: Stefan Hellermann <stefan@the2masters.de>
Signed-off-by: Yinghai LU <yinghai@kernel.org>

---
 include/linux/bootmem.h |    2 ++
 mm/page_alloc.c         |    6 +++---
 2 files changed, 5 insertions(+), 3 deletions(-)

Index: linux-2.6/include/linux/bootmem.h
===================================================================
--- linux-2.6.orig/include/linux/bootmem.h
+++ linux-2.6/include/linux/bootmem.h
@@ -111,6 +111,8 @@ extern void *__alloc_bootmem_low_node(pg
 	__alloc_bootmem_nopanic(x, PAGE_SIZE, __pa(MAX_DMA_ADDRESS))
 #define alloc_bootmem_node(pgdat, x) \
 	__alloc_bootmem_node(pgdat, x, SMP_CACHE_BYTES, __pa(MAX_DMA_ADDRESS))
+#define alloc_bootmem_node_nopanic(pgdat, x) \
+	__alloc_bootmem_node_nopanic(pgdat, x, SMP_CACHE_BYTES, __pa(MAX_DMA_ADDRESS))
 #define alloc_bootmem_pages_node(pgdat, x) \
 	__alloc_bootmem_node(pgdat, x, PAGE_SIZE, __pa(MAX_DMA_ADDRESS))
 #define alloc_bootmem_pages_node_nopanic(pgdat, x) \
Index: linux-2.6/mm/page_alloc.c
===================================================================
--- linux-2.6.orig/mm/page_alloc.c
+++ linux-2.6/mm/page_alloc.c
@@ -3564,7 +3564,7 @@ int zone_wait_table_init(struct zone *zo
 
 	if (!slab_is_available()) {
 		zone->wait_table = (wait_queue_head_t *)
-			alloc_bootmem_node(pgdat, alloc_size);
+			alloc_bootmem_node_nopanic(pgdat, alloc_size);
 	} else {
 		/*
 		 * This case means that a zone whose size was 0 gets new memory
@@ -4141,7 +4141,7 @@ static void __init setup_usemap(struct p
 	unsigned long usemapsize = usemap_size(zonesize);
 	zone->pageblock_flags = NULL;
 	if (usemapsize)
-		zone->pageblock_flags = alloc_bootmem_node(pgdat, usemapsize);
+		zone->pageblock_flags = alloc_bootmem_node_nopanic(pgdat, usemapsize);
 }
 #else
 static inline void setup_usemap(struct pglist_data *pgdat,
@@ -4307,7 +4307,7 @@ static void __init_refok alloc_node_mem_
 		size =  (end - start) * sizeof(struct page);
 		map = alloc_remap(pgdat->node_id, size);
 		if (!map)
-			map = alloc_bootmem_node(pgdat, size);
+			map = alloc_bootmem_node_nopanic(pgdat, size);
 		pgdat->node_mem_map = map + (pgdat->node_start_pfn - start);
 	}
 #ifndef CONFIG_NEED_MULTIPLE_NODES

  reply	other threads:[~2011-05-06  6:30 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-05-05 20:02 early crash on ancient tablet related to no-bootmem Stefan Hellermann
2011-05-05 21:57 ` Stefan Hellermann
2011-05-05 22:06   ` Yinghai Lu
2011-05-05 22:46     ` Stefan Hellermann
2011-05-06  6:30       ` Yinghai Lu [this message]
2011-05-06  8:52         ` Stefan Hellermann
2011-05-06 22:29           ` PATCH] mm: Use alloc_bootmem_node_nopanic on really needed path Yinghai Lu
2011-05-06 22:39             ` Andrew Morton
2011-05-06 22:48               ` Yinghai Lu
2011-05-07  8:22                 ` Ingo Molnar
2011-05-08 18:10           ` [PATCH -v2] " 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=4DC3958F.1090800@kernel.org \
    --to=yinghai@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=stefan@the2masters.de \
    /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