mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-06 14:48:06 +00:00
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
1 changed files with 16 additions and 20 deletions
|
@ -632,31 +632,27 @@ static void generic_online_page(struct page *page, unsigned int order)
|
||||||
#endif
|
#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,
|
static int online_pages_range(unsigned long start_pfn, unsigned long nr_pages,
|
||||||
void *arg)
|
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;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue