[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: Bob Picco <bob.picco@hp.com> Signed-off-by: Andi Kleen <ak@suse.de> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
parent
8893166ff8
commit
d3ee871e63
|
@ -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)
|
||||||
}
|
}
|
||||||
#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
|
||||||
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)
|
||||||
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);
|
||||||
}
|
}
|
||||||
|
|
Reference in New Issue