diff options
Diffstat (limited to 'mm/sparse.c')
-rw-r--r-- | mm/sparse.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/mm/sparse.c b/mm/sparse.c index 7a5dacaa06e3..6b8b5e91ceef 100644 --- a/mm/sparse.c +++ b/mm/sparse.c | |||
@@ -211,7 +211,7 @@ void __init memory_present(int nid, unsigned long start, unsigned long end) | |||
211 | if (unlikely(!mem_section)) { | 211 | if (unlikely(!mem_section)) { |
212 | unsigned long size, align; | 212 | unsigned long size, align; |
213 | 213 | ||
214 | size = sizeof(struct mem_section) * NR_SECTION_ROOTS; | 214 | size = sizeof(struct mem_section*) * NR_SECTION_ROOTS; |
215 | align = 1 << (INTERNODE_CACHE_SHIFT); | 215 | align = 1 << (INTERNODE_CACHE_SHIFT); |
216 | mem_section = memblock_virt_alloc(size, align); | 216 | mem_section = memblock_virt_alloc(size, align); |
217 | } | 217 | } |
@@ -264,7 +264,11 @@ unsigned long __init node_memmap_size_bytes(int nid, unsigned long start_pfn, | |||
264 | */ | 264 | */ |
265 | static unsigned long sparse_encode_mem_map(struct page *mem_map, unsigned long pnum) | 265 | static unsigned long sparse_encode_mem_map(struct page *mem_map, unsigned long pnum) |
266 | { | 266 | { |
267 | return (unsigned long)(mem_map - (section_nr_to_pfn(pnum))); | 267 | unsigned long coded_mem_map = |
268 | (unsigned long)(mem_map - (section_nr_to_pfn(pnum))); | ||
269 | BUILD_BUG_ON(SECTION_MAP_LAST_BIT > (1UL<<PFN_SECTION_SHIFT)); | ||
270 | BUG_ON(coded_mem_map & ~SECTION_MAP_MASK); | ||
271 | return coded_mem_map; | ||
268 | } | 272 | } |
269 | 273 | ||
270 | /* | 274 | /* |