arm: handle discontiguous page structures between sections
If SPARSEMEM is enabled and there is a large amount of memory, the page structures for the various sections may not be contiguous. The code to traverse all of the page structures in page_init() was incorrectly assuming all of the page structures were contiguous, causing early kernel panics in this case. Change-Id: I10548520f4d1c0c232a2df940ab0f9d57078c586 Signed-off-by: Larry Bassel <lbassel@codeaurora.org>
This commit is contained in:
parent
4e7305f5d1
commit
b2a4c825be
|
@ -658,7 +658,14 @@ void __init mem_init(void)
|
|||
else if (!page_count(page))
|
||||
free_pages++;
|
||||
page++;
|
||||
#ifdef CONFIG_SPARSEMEM
|
||||
pfn1++;
|
||||
if (!(pfn1 % PAGES_PER_SECTION))
|
||||
page = pfn_to_page(pfn1);
|
||||
} while (pfn1 < pfn2);
|
||||
#else
|
||||
} while (page < end);
|
||||
#endif
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
Loading…
Reference in New Issue