Commit 257bea71 authored by David Hildenbrand's avatar David Hildenbrand Committed by Linus Torvalds

mm/page_alloc: simplify __offline_isolated_pages()

offline_pages() is the only user.  __offline_isolated_pages() never gets
called with ranges that contain memory holes and we no longer care about
the return value.  Drop the return value handling and all pfn_valid()
checks.

Update the documentation.
Signed-off-by: default avatarDavid Hildenbrand <david@redhat.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Reviewed-by: default avatarOscar Salvador <osalvador@suse.de>
Acked-by: default avatarMichal Hocko <mhocko@suse.com>
Cc: Wei Yang <richard.weiyang@linux.alibaba.com>
Cc: Baoquan He <bhe@redhat.com>
Cc: Pankaj Gupta <pankaj.gupta.linux@gmail.com>
Cc: Charan Teja Reddy <charante@codeaurora.org>
Cc: Dan Williams <dan.j.williams@intel.com>
Cc: Fenghua Yu <fenghua.yu@intel.com>
Cc: Logan Gunthorpe <logang@deltatee.com>
Cc: "Matthew Wilcox (Oracle)" <willy@infradead.org>
Cc: Mel Gorman <mgorman@suse.de>
Cc: Mel Gorman <mgorman@techsingularity.net>
Cc: Michel Lespinasse <walken@google.com>
Cc: Mike Rapoport <rppt@kernel.org>
Cc: Tony Luck <tony.luck@intel.com>
Link: https://lkml.kernel.org/r/20200819175957.28465-5-david@redhat.comSigned-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 0a1a9a00
...@@ -103,8 +103,8 @@ extern int online_pages(unsigned long pfn, unsigned long nr_pages, ...@@ -103,8 +103,8 @@ extern int online_pages(unsigned long pfn, unsigned long nr_pages,
int online_type, int nid); int online_type, int nid);
extern struct zone *test_pages_in_a_zone(unsigned long start_pfn, extern struct zone *test_pages_in_a_zone(unsigned long start_pfn,
unsigned long end_pfn); unsigned long end_pfn);
extern unsigned long __offline_isolated_pages(unsigned long start_pfn, extern void __offline_isolated_pages(unsigned long start_pfn,
unsigned long end_pfn); unsigned long end_pfn);
typedef void (*online_page_callback_t)(struct page *page, unsigned int order); typedef void (*online_page_callback_t)(struct page *page, unsigned int order);
......
...@@ -8704,35 +8704,21 @@ void zone_pcp_reset(struct zone *zone) ...@@ -8704,35 +8704,21 @@ void zone_pcp_reset(struct zone *zone)
#ifdef CONFIG_MEMORY_HOTREMOVE #ifdef CONFIG_MEMORY_HOTREMOVE
/* /*
* All pages in the range must be in a single zone and isolated * All pages in the range must be in a single zone, must not contain holes,
* before calling this. * must span full sections, and must be isolated before calling this function.
*/ */
unsigned long void __offline_isolated_pages(unsigned long start_pfn, unsigned long end_pfn)
__offline_isolated_pages(unsigned long start_pfn, unsigned long end_pfn)
{ {
unsigned long pfn = start_pfn;
struct page *page; struct page *page;
struct zone *zone; struct zone *zone;
unsigned int order; unsigned int order;
unsigned long pfn;
unsigned long flags; unsigned long flags;
unsigned long offlined_pages = 0;
/* find the first valid pfn */
for (pfn = start_pfn; pfn < end_pfn; pfn++)
if (pfn_valid(pfn))
break;
if (pfn == end_pfn)
return offlined_pages;
offline_mem_sections(pfn, end_pfn); offline_mem_sections(pfn, end_pfn);
zone = page_zone(pfn_to_page(pfn)); zone = page_zone(pfn_to_page(pfn));
spin_lock_irqsave(&zone->lock, flags); spin_lock_irqsave(&zone->lock, flags);
pfn = start_pfn;
while (pfn < end_pfn) { while (pfn < end_pfn) {
if (!pfn_valid(pfn)) {
pfn++;
continue;
}
page = pfn_to_page(pfn); page = pfn_to_page(pfn);
/* /*
* The HWPoisoned page may be not in buddy system, and * The HWPoisoned page may be not in buddy system, and
...@@ -8740,7 +8726,6 @@ __offline_isolated_pages(unsigned long start_pfn, unsigned long end_pfn) ...@@ -8740,7 +8726,6 @@ __offline_isolated_pages(unsigned long start_pfn, unsigned long end_pfn)
*/ */
if (unlikely(!PageBuddy(page) && PageHWPoison(page))) { if (unlikely(!PageBuddy(page) && PageHWPoison(page))) {
pfn++; pfn++;
offlined_pages++;
continue; continue;
} }
/* /*
...@@ -8751,20 +8736,16 @@ __offline_isolated_pages(unsigned long start_pfn, unsigned long end_pfn) ...@@ -8751,20 +8736,16 @@ __offline_isolated_pages(unsigned long start_pfn, unsigned long end_pfn)
BUG_ON(page_count(page)); BUG_ON(page_count(page));
BUG_ON(PageBuddy(page)); BUG_ON(PageBuddy(page));
pfn++; pfn++;
offlined_pages++;
continue; continue;
} }
BUG_ON(page_count(page)); BUG_ON(page_count(page));
BUG_ON(!PageBuddy(page)); BUG_ON(!PageBuddy(page));
order = page_order(page); order = page_order(page);
offlined_pages += 1 << order;
del_page_from_free_list(page, zone, order); del_page_from_free_list(page, zone, order);
pfn += (1 << order); pfn += (1 << order);
} }
spin_unlock_irqrestore(&zone->lock, flags); spin_unlock_irqrestore(&zone->lock, flags);
return offlined_pages;
} }
#endif #endif
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment