summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Hildenbrand <david@redhat.com>2019-09-23 18:36:02 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2019-09-24 18:54:09 -0400
commitb2c2ab208e4fa12b0ae5692d14565006899a11fd (patch)
treeb2e1d81b4544827e504735ca292f54a28a437b26
parent5ecae6359e3a37624cd34d02e4b3401cf98bb62f (diff)
mm/memory_hotplug: simplify online_pages_range()
online_pages always corresponds to nr_pages. Simplify the code, getting rid of online_pages_blocks(). Add some comments. Link: http://lkml.kernel.org/r/20190814154109.3448-4-david@redhat.com Signed-off-by: David Hildenbrand <david@redhat.com> Acked-by: Michal Hocko <mhocko@suse.com> Cc: Oscar Salvador <osalvador@suse.de> Cc: Pavel Tatashin <pasha.tatashin@soleen.com> Cc: Dan Williams <dan.j.williams@intel.com> Cc: Arun KS <arunks@codeaurora.org> Cc: Bjorn Helgaas <bhelgaas@google.com> Cc: Borislav Petkov <bp@suse.de> Cc: Dave Hansen <dave.hansen@linux.intel.com> Cc: Ingo Molnar <mingo@kernel.org> Cc: Nadav Amit <namit@vmware.com> Cc: Wei Yang <richardw.yang@linux.intel.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
-rw-r--r--mm/memory_hotplug.c36
1 files changed, 16 insertions, 20 deletions
diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c
index c38050785d12..b5ad646df86b 100644
--- a/mm/memory_hotplug.c
+++ b/mm/memory_hotplug.c
@@ -632,31 +632,27 @@ static void generic_online_page(struct page *page, unsigned int order)
632#endif 632#endif
633} 633}
634 634
635static int online_pages_blocks(unsigned long start, unsigned long nr_pages)
636{
637 unsigned long end = start + nr_pages;
638 int order, onlined_pages = 0;
639
640 while (start < end) {
641 order = min(MAX_ORDER - 1,
642 get_order(PFN_PHYS(end) - PFN_PHYS(start)));
643 (*online_page_callback)(pfn_to_page(start), order);
644
645 onlined_pages += (1UL << order);
646 start += (1UL << order);
647 }
648 return onlined_pages;
649}
650
651static int online_pages_range(unsigned long start_pfn, unsigned long nr_pages, 635static int online_pages_range(unsigned long start_pfn, unsigned long nr_pages,
652 void *arg) 636 void *arg)
653{ 637{
654 unsigned long onlined_pages = *(unsigned long *)arg; 638 const unsigned long end_pfn = start_pfn + nr_pages;
639 unsigned long pfn;
640 int order;
641
642 /*
643 * Online the pages. The callback might decide to keep some pages
644 * PG_reserved (to add them to the buddy later), but we still account
645 * them as being online/belonging to this zone ("present").
646 */
647 for (pfn = start_pfn; pfn < end_pfn; pfn += 1ul << order) {
648 order = min(MAX_ORDER - 1, get_order(PFN_PHYS(end_pfn - pfn)));
649 (*online_page_callback)(pfn_to_page(pfn), order);
650 }
655 651
656 onlined_pages += online_pages_blocks(start_pfn, nr_pages); 652 /* mark all involved sections as online */
657 online_mem_sections(start_pfn, start_pfn + nr_pages); 653 online_mem_sections(start_pfn, end_pfn);
658 654
659 *(unsigned long *)arg = onlined_pages; 655 *(unsigned long *)arg += nr_pages;
660 return 0; 656 return 0;
661} 657}
662 658