diff options
| -rw-r--r-- | include/linux/mmzone.h | 2 | ||||
| -rw-r--r-- | mm/memory_hotplug.c | 23 | ||||
| -rw-r--r-- | mm/page_alloc.c | 8 |
3 files changed, 8 insertions, 25 deletions
diff --git a/include/linux/mmzone.h b/include/linux/mmzone.h index fc39f85d273c..976a1202bec1 100644 --- a/include/linux/mmzone.h +++ b/include/linux/mmzone.h | |||
| @@ -772,7 +772,7 @@ enum memmap_context { | |||
| 772 | MEMMAP_EARLY, | 772 | MEMMAP_EARLY, |
| 773 | MEMMAP_HOTPLUG, | 773 | MEMMAP_HOTPLUG, |
| 774 | }; | 774 | }; |
| 775 | extern int init_currently_empty_zone(struct zone *zone, unsigned long start_pfn, | 775 | extern void init_currently_empty_zone(struct zone *zone, unsigned long start_pfn, |
| 776 | unsigned long size); | 776 | unsigned long size); |
| 777 | 777 | ||
| 778 | extern void lruvec_init(struct lruvec *lruvec); | 778 | extern void lruvec_init(struct lruvec *lruvec); |
diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c index b63d7d1239df..b93c88125766 100644 --- a/mm/memory_hotplug.c +++ b/mm/memory_hotplug.c | |||
| @@ -348,27 +348,20 @@ static void fix_zone_id(struct zone *zone, unsigned long start_pfn, | |||
| 348 | set_page_links(pfn_to_page(pfn), zid, nid, pfn); | 348 | set_page_links(pfn_to_page(pfn), zid, nid, pfn); |
| 349 | } | 349 | } |
| 350 | 350 | ||
| 351 | /* Can fail with -ENOMEM from allocating a wait table with vmalloc() or | 351 | static void __ref ensure_zone_is_initialized(struct zone *zone, |
| 352 | * alloc_bootmem_node_nopanic()/memblock_virt_alloc_node_nopanic() */ | ||
| 353 | static int __ref ensure_zone_is_initialized(struct zone *zone, | ||
| 354 | unsigned long start_pfn, unsigned long num_pages) | 352 | unsigned long start_pfn, unsigned long num_pages) |
| 355 | { | 353 | { |
| 356 | if (!zone_is_initialized(zone)) | 354 | if (!zone_is_initialized(zone)) |
| 357 | return init_currently_empty_zone(zone, start_pfn, num_pages); | 355 | init_currently_empty_zone(zone, start_pfn, num_pages); |
| 358 | |||
| 359 | return 0; | ||
| 360 | } | 356 | } |
| 361 | 357 | ||
| 362 | static int __meminit move_pfn_range_left(struct zone *z1, struct zone *z2, | 358 | static int __meminit move_pfn_range_left(struct zone *z1, struct zone *z2, |
| 363 | unsigned long start_pfn, unsigned long end_pfn) | 359 | unsigned long start_pfn, unsigned long end_pfn) |
| 364 | { | 360 | { |
| 365 | int ret; | ||
| 366 | unsigned long flags; | 361 | unsigned long flags; |
| 367 | unsigned long z1_start_pfn; | 362 | unsigned long z1_start_pfn; |
| 368 | 363 | ||
| 369 | ret = ensure_zone_is_initialized(z1, start_pfn, end_pfn - start_pfn); | 364 | ensure_zone_is_initialized(z1, start_pfn, end_pfn - start_pfn); |
| 370 | if (ret) | ||
| 371 | return ret; | ||
| 372 | 365 | ||
| 373 | pgdat_resize_lock(z1->zone_pgdat, &flags); | 366 | pgdat_resize_lock(z1->zone_pgdat, &flags); |
| 374 | 367 | ||
| @@ -404,13 +397,10 @@ out_fail: | |||
| 404 | static int __meminit move_pfn_range_right(struct zone *z1, struct zone *z2, | 397 | static int __meminit move_pfn_range_right(struct zone *z1, struct zone *z2, |
| 405 | unsigned long start_pfn, unsigned long end_pfn) | 398 | unsigned long start_pfn, unsigned long end_pfn) |
| 406 | { | 399 | { |
| 407 | int ret; | ||
| 408 | unsigned long flags; | 400 | unsigned long flags; |
| 409 | unsigned long z2_end_pfn; | 401 | unsigned long z2_end_pfn; |
| 410 | 402 | ||
| 411 | ret = ensure_zone_is_initialized(z2, start_pfn, end_pfn - start_pfn); | 403 | ensure_zone_is_initialized(z2, start_pfn, end_pfn - start_pfn); |
| 412 | if (ret) | ||
| 413 | return ret; | ||
| 414 | 404 | ||
| 415 | pgdat_resize_lock(z1->zone_pgdat, &flags); | 405 | pgdat_resize_lock(z1->zone_pgdat, &flags); |
| 416 | 406 | ||
| @@ -481,12 +471,9 @@ static int __meminit __add_zone(struct zone *zone, unsigned long phys_start_pfn) | |||
| 481 | int nid = pgdat->node_id; | 471 | int nid = pgdat->node_id; |
| 482 | int zone_type; | 472 | int zone_type; |
| 483 | unsigned long flags, pfn; | 473 | unsigned long flags, pfn; |
| 484 | int ret; | ||
| 485 | 474 | ||
| 486 | zone_type = zone - pgdat->node_zones; | 475 | zone_type = zone - pgdat->node_zones; |
| 487 | ret = ensure_zone_is_initialized(zone, phys_start_pfn, nr_pages); | 476 | ensure_zone_is_initialized(zone, phys_start_pfn, nr_pages); |
| 488 | if (ret) | ||
| 489 | return ret; | ||
| 490 | 477 | ||
| 491 | pgdat_resize_lock(zone->zone_pgdat, &flags); | 478 | pgdat_resize_lock(zone->zone_pgdat, &flags); |
| 492 | grow_zone_span(zone, phys_start_pfn, phys_start_pfn + nr_pages); | 479 | grow_zone_span(zone, phys_start_pfn, phys_start_pfn + nr_pages); |
diff --git a/mm/page_alloc.c b/mm/page_alloc.c index 2302f250d6b1..73f854344735 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c | |||
| @@ -5528,7 +5528,7 @@ static __meminit void zone_pcp_init(struct zone *zone) | |||
| 5528 | zone_batchsize(zone)); | 5528 | zone_batchsize(zone)); |
| 5529 | } | 5529 | } |
| 5530 | 5530 | ||
| 5531 | int __meminit init_currently_empty_zone(struct zone *zone, | 5531 | void __meminit init_currently_empty_zone(struct zone *zone, |
| 5532 | unsigned long zone_start_pfn, | 5532 | unsigned long zone_start_pfn, |
| 5533 | unsigned long size) | 5533 | unsigned long size) |
| 5534 | { | 5534 | { |
| @@ -5546,8 +5546,6 @@ int __meminit init_currently_empty_zone(struct zone *zone, | |||
| 5546 | 5546 | ||
| 5547 | zone_init_free_lists(zone); | 5547 | zone_init_free_lists(zone); |
| 5548 | zone->initialized = 1; | 5548 | zone->initialized = 1; |
| 5549 | |||
| 5550 | return 0; | ||
| 5551 | } | 5549 | } |
| 5552 | 5550 | ||
| 5553 | #ifdef CONFIG_HAVE_MEMBLOCK_NODE_MAP | 5551 | #ifdef CONFIG_HAVE_MEMBLOCK_NODE_MAP |
| @@ -6005,7 +6003,6 @@ static void __paginginit free_area_init_core(struct pglist_data *pgdat) | |||
| 6005 | { | 6003 | { |
| 6006 | enum zone_type j; | 6004 | enum zone_type j; |
| 6007 | int nid = pgdat->node_id; | 6005 | int nid = pgdat->node_id; |
| 6008 | int ret; | ||
| 6009 | 6006 | ||
| 6010 | pgdat_resize_init(pgdat); | 6007 | pgdat_resize_init(pgdat); |
| 6011 | #ifdef CONFIG_NUMA_BALANCING | 6008 | #ifdef CONFIG_NUMA_BALANCING |
| @@ -6087,8 +6084,7 @@ static void __paginginit free_area_init_core(struct pglist_data *pgdat) | |||
| 6087 | 6084 | ||
| 6088 | set_pageblock_order(); | 6085 | set_pageblock_order(); |
| 6089 | setup_usemap(pgdat, zone, zone_start_pfn, size); | 6086 | setup_usemap(pgdat, zone, zone_start_pfn, size); |
| 6090 | ret = init_currently_empty_zone(zone, zone_start_pfn, size); | 6087 | init_currently_empty_zone(zone, zone_start_pfn, size); |
| 6091 | BUG_ON(ret); | ||
| 6092 | memmap_init(size, nid, j, zone_start_pfn); | 6088 | memmap_init(size, nid, j, zone_start_pfn); |
| 6093 | } | 6089 | } |
| 6094 | } | 6090 | } |
