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>
This commit is contained in:
parent
5ecae6359e
commit
b2c2ab208e
|
@ -632,31 +632,27 @@ static void generic_online_page(struct page *page, unsigned int order)
|
|||
#endif
|
||||
}
|
||||
|
||||
static int online_pages_blocks(unsigned long start, unsigned long nr_pages)
|
||||
{
|
||||
unsigned long end = start + nr_pages;
|
||||
int order, onlined_pages = 0;
|
||||
|
||||
while (start < end) {
|
||||
order = min(MAX_ORDER - 1,
|
||||
get_order(PFN_PHYS(end) - PFN_PHYS(start)));
|
||||
(*online_page_callback)(pfn_to_page(start), order);
|
||||
|
||||
onlined_pages += (1UL << order);
|
||||
start += (1UL << order);
|
||||
}
|
||||
return onlined_pages;
|
||||
}
|
||||
|
||||
static int online_pages_range(unsigned long start_pfn, unsigned long nr_pages,
|
||||
void *arg)
|
||||
{
|
||||
unsigned long onlined_pages = *(unsigned long *)arg;
|
||||
const unsigned long end_pfn = start_pfn + nr_pages;
|
||||
unsigned long pfn;
|
||||
int order;
|
||||
|
||||
onlined_pages += online_pages_blocks(start_pfn, nr_pages);
|
||||
online_mem_sections(start_pfn, start_pfn + nr_pages);
|
||||
/*
|
||||
* Online the pages. The callback might decide to keep some pages
|
||||
* PG_reserved (to add them to the buddy later), but we still account
|
||||
* them as being online/belonging to this zone ("present").
|
||||
*/
|
||||
for (pfn = start_pfn; pfn < end_pfn; pfn += 1ul << order) {
|
||||
order = min(MAX_ORDER - 1, get_order(PFN_PHYS(end_pfn - pfn)));
|
||||
(*online_page_callback)(pfn_to_page(pfn), order);
|
||||
}
|
||||
|
||||
*(unsigned long *)arg = onlined_pages;
|
||||
/* mark all involved sections as online */
|
||||
online_mem_sections(start_pfn, end_pfn);
|
||||
|
||||
*(unsigned long *)arg += nr_pages;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue