diff options
Diffstat (limited to 'mm/memory_hotplug.c')
-rw-r--r-- | mm/memory_hotplug.c | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c index e4412a676c88..821dee596377 100644 --- a/mm/memory_hotplug.c +++ b/mm/memory_hotplug.c | |||
@@ -339,8 +339,11 @@ EXPORT_SYMBOL_GPL(__remove_pages); | |||
339 | 339 | ||
340 | void online_page(struct page *page) | 340 | void online_page(struct page *page) |
341 | { | 341 | { |
342 | unsigned long pfn = page_to_pfn(page); | ||
343 | |||
342 | totalram_pages++; | 344 | totalram_pages++; |
343 | num_physpages++; | 345 | if (pfn >= num_physpages) |
346 | num_physpages = pfn + 1; | ||
344 | 347 | ||
345 | #ifdef CONFIG_HIGHMEM | 348 | #ifdef CONFIG_HIGHMEM |
346 | if (PageHighMem(page)) | 349 | if (PageHighMem(page)) |
@@ -410,7 +413,7 @@ int online_pages(unsigned long pfn, unsigned long nr_pages) | |||
410 | if (!populated_zone(zone)) | 413 | if (!populated_zone(zone)) |
411 | need_zonelists_rebuild = 1; | 414 | need_zonelists_rebuild = 1; |
412 | 415 | ||
413 | ret = walk_memory_resource(pfn, nr_pages, &onlined_pages, | 416 | ret = walk_system_ram_range(pfn, nr_pages, &onlined_pages, |
414 | online_pages_range); | 417 | online_pages_range); |
415 | if (ret) { | 418 | if (ret) { |
416 | printk(KERN_DEBUG "online_pages %lx at %lx failed\n", | 419 | printk(KERN_DEBUG "online_pages %lx at %lx failed\n", |
@@ -422,6 +425,7 @@ int online_pages(unsigned long pfn, unsigned long nr_pages) | |||
422 | zone->present_pages += onlined_pages; | 425 | zone->present_pages += onlined_pages; |
423 | zone->zone_pgdat->node_present_pages += onlined_pages; | 426 | zone->zone_pgdat->node_present_pages += onlined_pages; |
424 | 427 | ||
428 | zone_pcp_update(zone); | ||
425 | setup_per_zone_wmarks(); | 429 | setup_per_zone_wmarks(); |
426 | calculate_zone_inactive_ratio(zone); | 430 | calculate_zone_inactive_ratio(zone); |
427 | if (onlined_pages) { | 431 | if (onlined_pages) { |
@@ -701,7 +705,7 @@ offline_isolated_pages_cb(unsigned long start, unsigned long nr_pages, | |||
701 | static void | 705 | static void |
702 | offline_isolated_pages(unsigned long start_pfn, unsigned long end_pfn) | 706 | offline_isolated_pages(unsigned long start_pfn, unsigned long end_pfn) |
703 | { | 707 | { |
704 | walk_memory_resource(start_pfn, end_pfn - start_pfn, NULL, | 708 | walk_system_ram_range(start_pfn, end_pfn - start_pfn, NULL, |
705 | offline_isolated_pages_cb); | 709 | offline_isolated_pages_cb); |
706 | } | 710 | } |
707 | 711 | ||
@@ -727,7 +731,7 @@ check_pages_isolated(unsigned long start_pfn, unsigned long end_pfn) | |||
727 | long offlined = 0; | 731 | long offlined = 0; |
728 | int ret; | 732 | int ret; |
729 | 733 | ||
730 | ret = walk_memory_resource(start_pfn, end_pfn - start_pfn, &offlined, | 734 | ret = walk_system_ram_range(start_pfn, end_pfn - start_pfn, &offlined, |
731 | check_pages_isolated_cb); | 735 | check_pages_isolated_cb); |
732 | if (ret < 0) | 736 | if (ret < 0) |
733 | offlined = (long)ret; | 737 | offlined = (long)ret; |
@@ -831,7 +835,6 @@ repeat: | |||
831 | zone->present_pages -= offlined_pages; | 835 | zone->present_pages -= offlined_pages; |
832 | zone->zone_pgdat->node_present_pages -= offlined_pages; | 836 | zone->zone_pgdat->node_present_pages -= offlined_pages; |
833 | totalram_pages -= offlined_pages; | 837 | totalram_pages -= offlined_pages; |
834 | num_physpages -= offlined_pages; | ||
835 | 838 | ||
836 | setup_per_zone_wmarks(); | 839 | setup_per_zone_wmarks(); |
837 | calculate_zone_inactive_ratio(zone); | 840 | calculate_zone_inactive_ratio(zone); |