diff options
author | David Hildenbrand <david@redhat.com> | 2019-09-23 18:36:02 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2019-09-24 18:54:09 -0400 |
commit | b2c2ab208e4fa12b0ae5692d14565006899a11fd (patch) | |
tree | b2e1d81b4544827e504735ca292f54a28a437b26 | |
parent | 5ecae6359e3a37624cd34d02e4b3401cf98bb62f (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.c | 36 |
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 | ||
635 | static 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 | |||
651 | static int online_pages_range(unsigned long start_pfn, unsigned long nr_pages, | 635 | static 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 | ||