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:
Larry Bassel 2011-10-02 17:17:45 -07:00 committed by Zhoulu Luo
parent 4e7305f5d1
commit b2a4c825be
1 changed files with 7 additions and 0 deletions

View File

@ -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
}
/*