x86/mm: Initialize high mem before free_all_bootmem()
authorStanislaw Gruszka <sgruszka@redhat.com>
Tue, 6 Dec 2011 08:08:34 +0000 (09:08 +0100)
committerIngo Molnar <mingo@elte.hu>
Tue, 6 Dec 2011 08:23:53 +0000 (09:23 +0100)
commit855c743a27bb58a9a521bdc485ef5acfdb69badc
tree0b53ae9a389f64a6f4c10492786d45d0453c6c25
parent706d9a9c8b5758390036b9980a2b12d809599777
x86/mm: Initialize high mem before free_all_bootmem()

Patch fixes a boot crash with pagealloc debugging enabled:

  Initializing HighMem for node 0 (000377fe:0003fff0)
  BUG: unable to handle kernel paging request at f6fefe80
  IP: [<c1621ab5>] find_range_array+0x5e/0x69
  [...]
  Call Trace:
   [<c1622064>] __get_free_all_memory_range+0x39/0xb4
   [<c1620dd0>] add_highpages_with_active_regions+0x18/0x9b
   [<c1621a2e>] set_highmem_pages_init+0x70/0x90
   [<c162122b>] mem_init+0x50/0x21b
   [<c16155bd>] start_kernel+0x1bf/0x31c
   [<c1615065>] i386_start_kernel+0x65/0x67

The crash happens when memblock wants to allocate big area for
temporary "struct range" array and reuses pages from top of low
memory, which were already passed to the buddy allocator.

Reported-by: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
Cc: linux-mm@kvack.org
Cc: Mel Gorman <mgorman@suse.de>
Link: http://lkml.kernel.org/r/20111206080833.GB3105@redhat.com
Signed-off-by: Ingo Molnar <mingo@elte.hu>
arch/x86/mm/init_32.c