]> asedeno.scripts.mit.edu Git - linux.git/blobdiff - mm/sparse.c
Merge tags 'cris-for-4.16' and 'cris-for-4.16-urgent' of git://git.kernel.org/pub...
[linux.git] / mm / sparse.c
index 06130c13dc99221ba421ff3483ba24346cc712b4..7af5e7a92528b4edf622a388faf3e39672144801 100644 (file)
@@ -211,7 +211,7 @@ void __init memory_present(int nid, unsigned long start, unsigned long end)
        if (unlikely(!mem_section)) {
                unsigned long size, align;
 
-               size = sizeof(struct mem_section) * NR_SECTION_ROOTS;
+               size = sizeof(struct mem_section*) * NR_SECTION_ROOTS;
                align = 1 << (INTERNODE_CACHE_SHIFT);
                mem_section = memblock_virt_alloc(size, align);
        }
@@ -264,7 +264,11 @@ unsigned long __init node_memmap_size_bytes(int nid, unsigned long start_pfn,
  */
 static unsigned long sparse_encode_mem_map(struct page *mem_map, unsigned long pnum)
 {
-       return (unsigned long)(mem_map - (section_nr_to_pfn(pnum)));
+       unsigned long coded_mem_map =
+               (unsigned long)(mem_map - (section_nr_to_pfn(pnum)));
+       BUILD_BUG_ON(SECTION_MAP_LAST_BIT > (1UL<<PFN_SECTION_SHIFT));
+       BUG_ON(coded_mem_map & ~SECTION_MAP_MASK);
+       return coded_mem_map;
 }
 
 /*