Commit d3ee871e authored by Bob Picco's avatar Bob Picco Committed by Linus Torvalds

[PATCH] x86_64: Fix sparse mem

Fix up booting with sparse mem enabled. Otherwise it would just
cause an early PANIC at boot.
Signed-off-by: default avatarBob Picco <bob.picco@hp.com>
Signed-off-by: default avatarAndi Kleen <ak@suse.de>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 8893166f
...@@ -412,7 +412,6 @@ contig_initmem_init(unsigned long start_pfn, unsigned long end_pfn) ...@@ -412,7 +412,6 @@ contig_initmem_init(unsigned long start_pfn, unsigned long end_pfn)
{ {
unsigned long bootmap_size, bootmap; unsigned long bootmap_size, bootmap;
memory_present(0, start_pfn, end_pfn);
bootmap_size = bootmem_bootmap_pages(end_pfn)<<PAGE_SHIFT; bootmap_size = bootmem_bootmap_pages(end_pfn)<<PAGE_SHIFT;
bootmap = find_e820_area(0, end_pfn<<PAGE_SHIFT, bootmap_size); bootmap = find_e820_area(0, end_pfn<<PAGE_SHIFT, bootmap_size);
if (bootmap == -1L) if (bootmap == -1L)
...@@ -659,8 +658,6 @@ void __init setup_arch(char **cmdline_p) ...@@ -659,8 +658,6 @@ void __init setup_arch(char **cmdline_p)
} }
#endif #endif
sparse_init();
paging_init(); paging_init();
check_ioapic(); check_ioapic();
......
...@@ -113,7 +113,6 @@ void __init setup_node_bootmem(int nodeid, unsigned long start, unsigned long en ...@@ -113,7 +113,6 @@ void __init setup_node_bootmem(int nodeid, unsigned long start, unsigned long en
start_pfn = start >> PAGE_SHIFT; start_pfn = start >> PAGE_SHIFT;
end_pfn = end >> PAGE_SHIFT; end_pfn = end >> PAGE_SHIFT;
memory_present(nodeid, start_pfn, end_pfn);
nodedata_phys = find_e820_area(start, end, pgdat_size); nodedata_phys = find_e820_area(start, end, pgdat_size);
if (nodedata_phys == -1L) if (nodedata_phys == -1L)
panic("Cannot find memory pgdat in node %d\n", nodeid); panic("Cannot find memory pgdat in node %d\n", nodeid);
...@@ -285,9 +284,26 @@ unsigned long __init numa_free_all_bootmem(void) ...@@ -285,9 +284,26 @@ unsigned long __init numa_free_all_bootmem(void)
return pages; return pages;
} }
#ifdef CONFIG_SPARSEMEM
static void __init arch_sparse_init(void)
{
int i;
for_each_online_node(i)
memory_present(i, node_start_pfn(i), node_end_pfn(i));
sparse_init();
}
#else
#define arch_sparse_init() do {} while (0)
#endif
void __init paging_init(void) void __init paging_init(void)
{ {
int i; int i;
arch_sparse_init();
for_each_online_node(i) { for_each_online_node(i) {
setup_node_zones(i); setup_node_zones(i);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment