diff options
Diffstat (limited to 'mm')
-rw-r--r-- | mm/page_alloc.c | 27 |
1 files changed, 15 insertions, 12 deletions
diff --git a/mm/page_alloc.c b/mm/page_alloc.c index 4f59d1986018..b230e838883d 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c | |||
@@ -4215,7 +4215,6 @@ static noinline __init_refok | |||
4215 | int zone_wait_table_init(struct zone *zone, unsigned long zone_size_pages) | 4215 | int zone_wait_table_init(struct zone *zone, unsigned long zone_size_pages) |
4216 | { | 4216 | { |
4217 | int i; | 4217 | int i; |
4218 | struct pglist_data *pgdat = zone->zone_pgdat; | ||
4219 | size_t alloc_size; | 4218 | size_t alloc_size; |
4220 | 4219 | ||
4221 | /* | 4220 | /* |
@@ -4231,7 +4230,8 @@ int zone_wait_table_init(struct zone *zone, unsigned long zone_size_pages) | |||
4231 | 4230 | ||
4232 | if (!slab_is_available()) { | 4231 | if (!slab_is_available()) { |
4233 | zone->wait_table = (wait_queue_head_t *) | 4232 | zone->wait_table = (wait_queue_head_t *) |
4234 | alloc_bootmem_node_nopanic(pgdat, alloc_size); | 4233 | memblock_virt_alloc_node_nopanic( |
4234 | alloc_size, zone->zone_pgdat->node_id); | ||
4235 | } else { | 4235 | } else { |
4236 | /* | 4236 | /* |
4237 | * This case means that a zone whose size was 0 gets new memory | 4237 | * This case means that a zone whose size was 0 gets new memory |
@@ -4351,13 +4351,14 @@ bool __meminit early_pfn_in_nid(unsigned long pfn, int node) | |||
4351 | #endif | 4351 | #endif |
4352 | 4352 | ||
4353 | /** | 4353 | /** |
4354 | * free_bootmem_with_active_regions - Call free_bootmem_node for each active range | 4354 | * free_bootmem_with_active_regions - Call memblock_free_early_nid for each active range |
4355 | * @nid: The node to free memory on. If MAX_NUMNODES, all nodes are freed. | 4355 | * @nid: The node to free memory on. If MAX_NUMNODES, all nodes are freed. |
4356 | * @max_low_pfn: The highest PFN that will be passed to free_bootmem_node | 4356 | * @max_low_pfn: The highest PFN that will be passed to memblock_free_early_nid |
4357 | * | 4357 | * |
4358 | * If an architecture guarantees that all ranges registered with | 4358 | * If an architecture guarantees that all ranges registered with |
4359 | * add_active_ranges() contain no holes and may be freed, this | 4359 | * add_active_ranges() contain no holes and may be freed, this |
4360 | * this function may be used instead of calling free_bootmem() manually. | 4360 | * this function may be used instead of calling memblock_free_early_nid() |
4361 | * manually. | ||
4361 | */ | 4362 | */ |
4362 | void __init free_bootmem_with_active_regions(int nid, unsigned long max_low_pfn) | 4363 | void __init free_bootmem_with_active_regions(int nid, unsigned long max_low_pfn) |
4363 | { | 4364 | { |
@@ -4369,9 +4370,9 @@ void __init free_bootmem_with_active_regions(int nid, unsigned long max_low_pfn) | |||
4369 | end_pfn = min(end_pfn, max_low_pfn); | 4370 | end_pfn = min(end_pfn, max_low_pfn); |
4370 | 4371 | ||
4371 | if (start_pfn < end_pfn) | 4372 | if (start_pfn < end_pfn) |
4372 | free_bootmem_node(NODE_DATA(this_nid), | 4373 | memblock_free_early_nid(PFN_PHYS(start_pfn), |
4373 | PFN_PHYS(start_pfn), | 4374 | (end_pfn - start_pfn) << PAGE_SHIFT, |
4374 | (end_pfn - start_pfn) << PAGE_SHIFT); | 4375 | this_nid); |
4375 | } | 4376 | } |
4376 | } | 4377 | } |
4377 | 4378 | ||
@@ -4642,8 +4643,9 @@ static void __init setup_usemap(struct pglist_data *pgdat, | |||
4642 | unsigned long usemapsize = usemap_size(zone_start_pfn, zonesize); | 4643 | unsigned long usemapsize = usemap_size(zone_start_pfn, zonesize); |
4643 | zone->pageblock_flags = NULL; | 4644 | zone->pageblock_flags = NULL; |
4644 | if (usemapsize) | 4645 | if (usemapsize) |
4645 | zone->pageblock_flags = alloc_bootmem_node_nopanic(pgdat, | 4646 | zone->pageblock_flags = |
4646 | usemapsize); | 4647 | memblock_virt_alloc_node_nopanic(usemapsize, |
4648 | pgdat->node_id); | ||
4647 | } | 4649 | } |
4648 | #else | 4650 | #else |
4649 | static inline void setup_usemap(struct pglist_data *pgdat, struct zone *zone, | 4651 | static inline void setup_usemap(struct pglist_data *pgdat, struct zone *zone, |
@@ -4837,7 +4839,8 @@ static void __init_refok alloc_node_mem_map(struct pglist_data *pgdat) | |||
4837 | size = (end - start) * sizeof(struct page); | 4839 | size = (end - start) * sizeof(struct page); |
4838 | map = alloc_remap(pgdat->node_id, size); | 4840 | map = alloc_remap(pgdat->node_id, size); |
4839 | if (!map) | 4841 | if (!map) |
4840 | map = alloc_bootmem_node_nopanic(pgdat, size); | 4842 | map = memblock_virt_alloc_node_nopanic(size, |
4843 | pgdat->node_id); | ||
4841 | pgdat->node_mem_map = map + (pgdat->node_start_pfn - start); | 4844 | pgdat->node_mem_map = map + (pgdat->node_start_pfn - start); |
4842 | } | 4845 | } |
4843 | #ifndef CONFIG_NEED_MULTIPLE_NODES | 4846 | #ifndef CONFIG_NEED_MULTIPLE_NODES |
@@ -5887,7 +5890,7 @@ void *__init alloc_large_system_hash(const char *tablename, | |||
5887 | do { | 5890 | do { |
5888 | size = bucketsize << log2qty; | 5891 | size = bucketsize << log2qty; |
5889 | if (flags & HASH_EARLY) | 5892 | if (flags & HASH_EARLY) |
5890 | table = alloc_bootmem_nopanic(size); | 5893 | table = memblock_virt_alloc_nopanic(size, 0); |
5891 | else if (hashdist) | 5894 | else if (hashdist) |
5892 | table = __vmalloc(size, GFP_ATOMIC, PAGE_KERNEL); | 5895 | table = __vmalloc(size, GFP_ATOMIC, PAGE_KERNEL); |
5893 | else { | 5896 | else { |