|
@@ -257,19 +257,14 @@ struct page *sparse_decode_mem_map(unsigned long coded_mem_map, unsigned long pn
|
|
|
return ((struct page *)coded_mem_map) + section_nr_to_pfn(pnum);
|
|
|
}
|
|
|
|
|
|
-static int __meminit sparse_init_one_section(struct mem_section *ms,
|
|
|
+static void __meminit sparse_init_one_section(struct mem_section *ms,
|
|
|
unsigned long pnum, struct page *mem_map,
|
|
|
unsigned long *pageblock_bitmap)
|
|
|
{
|
|
|
- if (!present_section(ms))
|
|
|
- return -EINVAL;
|
|
|
-
|
|
|
ms->section_mem_map &= ~SECTION_MAP_MASK;
|
|
|
ms->section_mem_map |= sparse_encode_mem_map(mem_map, pnum) |
|
|
|
SECTION_HAS_MEM_MAP;
|
|
|
ms->pageblock_flags = pageblock_bitmap;
|
|
|
-
|
|
|
- return 1;
|
|
|
}
|
|
|
|
|
|
unsigned long usemap_size(void)
|
|
@@ -760,6 +755,7 @@ int __meminit sparse_add_one_section(struct pglist_data *pgdat,
|
|
|
ret = sparse_index_init(section_nr, pgdat->node_id);
|
|
|
if (ret < 0 && ret != -EEXIST)
|
|
|
return ret;
|
|
|
+ ret = 0;
|
|
|
memmap = kmalloc_section_memmap(section_nr, pgdat->node_id, altmap);
|
|
|
if (!memmap)
|
|
|
return -ENOMEM;
|
|
@@ -786,12 +782,11 @@ int __meminit sparse_add_one_section(struct pglist_data *pgdat,
|
|
|
#endif
|
|
|
|
|
|
section_mark_present(ms);
|
|
|
-
|
|
|
- ret = sparse_init_one_section(ms, section_nr, memmap, usemap);
|
|
|
+ sparse_init_one_section(ms, section_nr, memmap, usemap);
|
|
|
|
|
|
out:
|
|
|
pgdat_resize_unlock(pgdat, &flags);
|
|
|
- if (ret <= 0) {
|
|
|
+ if (ret < 0) {
|
|
|
kfree(usemap);
|
|
|
__kfree_section_memmap(memmap, altmap);
|
|
|
}
|