mirror of https://gitee.com/openkylin/linux.git
sh: Mark sparsemem regions present earlier.
We have to call in to sparse_memory_present_with_active_regions() earlier in order for sparsemem to be happy. This was being called too late, and was causing troubles with the platforms that needed to enable sparsemem. Signed-off-by: Paul Mundt <lethal@linux-sh.org>
This commit is contained in:
parent
d22d9b3a1d
commit
2826fa61c1
|
@ -116,7 +116,7 @@ static void __init register_bootmem_low_pages(void)
|
||||||
free_bootmem(PFN_PHYS(curr_pfn), PFN_PHYS(pages));
|
free_bootmem(PFN_PHYS(curr_pfn), PFN_PHYS(pages));
|
||||||
}
|
}
|
||||||
|
|
||||||
void __init setup_bootmem_allocator(unsigned long start_pfn)
|
void __init setup_bootmem_allocator(unsigned long free_pfn)
|
||||||
{
|
{
|
||||||
unsigned long bootmap_size;
|
unsigned long bootmap_size;
|
||||||
|
|
||||||
|
@ -125,7 +125,7 @@ void __init setup_bootmem_allocator(unsigned long start_pfn)
|
||||||
* bootstrap step all allocations (until the page allocator
|
* bootstrap step all allocations (until the page allocator
|
||||||
* is intact) must be done via bootmem_alloc().
|
* is intact) must be done via bootmem_alloc().
|
||||||
*/
|
*/
|
||||||
bootmap_size = init_bootmem_node(NODE_DATA(0), start_pfn,
|
bootmap_size = init_bootmem_node(NODE_DATA(0), free_pfn,
|
||||||
min_low_pfn, max_low_pfn);
|
min_low_pfn, max_low_pfn);
|
||||||
|
|
||||||
add_active_range(0, min_low_pfn, max_low_pfn);
|
add_active_range(0, min_low_pfn, max_low_pfn);
|
||||||
|
@ -141,7 +141,7 @@ void __init setup_bootmem_allocator(unsigned long start_pfn)
|
||||||
* an invalid RAM area.
|
* an invalid RAM area.
|
||||||
*/
|
*/
|
||||||
reserve_bootmem(__MEMORY_START+PAGE_SIZE,
|
reserve_bootmem(__MEMORY_START+PAGE_SIZE,
|
||||||
(PFN_PHYS(start_pfn)+bootmap_size+PAGE_SIZE-1)-__MEMORY_START);
|
(PFN_PHYS(free_pfn)+bootmap_size+PAGE_SIZE-1)-__MEMORY_START);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* reserve physical page 0 - it's a special BIOS page on many boxes,
|
* reserve physical page 0 - it's a special BIOS page on many boxes,
|
||||||
|
@ -149,6 +149,8 @@ void __init setup_bootmem_allocator(unsigned long start_pfn)
|
||||||
*/
|
*/
|
||||||
reserve_bootmem(__MEMORY_START, PAGE_SIZE);
|
reserve_bootmem(__MEMORY_START, PAGE_SIZE);
|
||||||
|
|
||||||
|
sparse_memory_present_with_active_regions(0);
|
||||||
|
|
||||||
#ifdef CONFIG_BLK_DEV_INITRD
|
#ifdef CONFIG_BLK_DEV_INITRD
|
||||||
ROOT_DEV = MKDEV(RAMDISK_MAJOR, 0);
|
ROOT_DEV = MKDEV(RAMDISK_MAJOR, 0);
|
||||||
if (&__rd_start != &__rd_end) {
|
if (&__rd_start != &__rd_end) {
|
||||||
|
@ -193,7 +195,6 @@ static void __init setup_memory(void)
|
||||||
*/
|
*/
|
||||||
start_pfn = PFN_UP(__pa(_end));
|
start_pfn = PFN_UP(__pa(_end));
|
||||||
setup_bootmem_allocator(start_pfn);
|
setup_bootmem_allocator(start_pfn);
|
||||||
sparse_memory_present_with_active_regions(0);
|
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
extern void __init setup_memory(void);
|
extern void __init setup_memory(void);
|
||||||
|
|
Loading…
Reference in New Issue