diff options
Diffstat (limited to 'mm/sparse.c')
-rw-r--r-- | mm/sparse.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/mm/sparse.c b/mm/sparse.c index 044138852baf..60805abf98af 100644 --- a/mm/sparse.c +++ b/mm/sparse.c | |||
@@ -207,6 +207,16 @@ void __init memory_present(int nid, unsigned long start, unsigned long end) | |||
207 | { | 207 | { |
208 | unsigned long pfn; | 208 | unsigned long pfn; |
209 | 209 | ||
210 | #ifdef CONFIG_SPARSEMEM_EXTREME | ||
211 | if (unlikely(!mem_section)) { | ||
212 | unsigned long size, align; | ||
213 | |||
214 | size = sizeof(struct mem_section) * NR_SECTION_ROOTS; | ||
215 | align = 1 << (INTERNODE_CACHE_SHIFT); | ||
216 | mem_section = memblock_virt_alloc(size, align); | ||
217 | } | ||
218 | #endif | ||
219 | |||
210 | start &= PAGE_SECTION_MASK; | 220 | start &= PAGE_SECTION_MASK; |
211 | mminit_validate_memmodel_limits(&start, &end); | 221 | mminit_validate_memmodel_limits(&start, &end); |
212 | for (pfn = start; pfn < end; pfn += PAGES_PER_SECTION) { | 222 | for (pfn = start; pfn < end; pfn += PAGES_PER_SECTION) { |