mm/memory_hotplug: drop valid_start/valid_end from test_pages_in_a_zone()
Subsystems (3)
PATCH 1/1 mm/memory_hotplug: drop valid_start/valid_end from test_pages_in_a_zone()
The callers are only interested in the actual zone, they don't care about boundaries. Return the zone instead to simplify.
Cc Greg Kroah-Hartman <[email protected]>
Cc "Rafael J. Wysocki" <[email protected]>
Cc Andrew Morton <[email protected]>
Cc Michal Hocko <[email protected]>
Cc Oscar Salvador <[email protected]>
Signed-off-by David Hildenbrand <[email protected]>
--- drivers/base/memory.c | 9 ++++----- include/linux/memory_hotplug.h | 4 ++-- mm/memory_hotplug.c | 31 +++++++++---------------------- 3 files changed, 15 insertions(+), 29 deletions(-)
drivers/base/memory.c +4 -5
@@ -406,7 +406,6 @@ static ssize_t valid_zones_show(struct device *dev,struct memory_block *mem =to_memory_block (dev);unsigned long start_pfn =section_nr_to_pfn (mem->start_section_nr);unsigned long nr_pages =PAGES_PER_SECTION * sections_per_block; -unsigned long valid_start_pfn, valid_end_pfn;struct zone *default_zone;int nid;
@@ -419,11 +418,11 @@ static ssize_t valid_zones_show(struct device *dev,* The block contains more than one zone can not be offlined. * This can happen e.g. for ZONE_DMA and ZONE_DMA32 */ -if (!test_pages_in_a_zone (start_pfn, start_pfn + nr_pages, - &valid_start_pfn, &valid_end_pfn)) + default_zone =test_pages_in_a_zone (start_pfn, + start_pfn + nr_pages); +if (!default_zone)return sprintf (buf,"none\n" ); - start_pfn = valid_start_pfn; -strcat (buf,page_zone (pfn_to_page (start_pfn))->name); +strcat (buf, default_zone->name); goto out; }
include/linux/memory_hotplug.h +2 -2
@@ -96,8 +96,8 @@ extern int add_one_highpage(struct page *page, int pfn, int bad_ppro);/* VM interface that may be used by firmware interface */ extern int online_pages (unsigned long pfn,unsigned long nr_pages,int online_type,int nid); -extern int test_pages_in_a_zone (unsigned long start_pfn,unsigned long end_pfn, -unsigned long *valid_start,unsigned long *valid_end); +extern struct zone *test_pages_in_a_zone (unsigned long start_pfn, +unsigned long end_pfn);extern unsigned long __offline_isolated_pages (unsigned long start_pfn,unsigned long end_pfn);
mm/memory_hotplug.c +9 -22
@@ -1172,14 +1172,13 @@ bool is_mem_section_removable(unsigned long start_pfn, unsigned long nr_pages) }/* -* Confirm all pages in a range [start, end) belong to the same zone. -* When true, return its valid [start, end). +* Confirm all pages in a range [start, end) belong to the same zone (skipping +* memory holes). When true, return the zone. */ -int test_pages_in_a_zone (unsigned long start_pfn,unsigned long end_pfn, -unsigned long *valid_start,unsigned long *valid_end) +struct zone *test_pages_in_a_zone (unsigned long start_pfn, +unsigned long end_pfn) {unsigned long pfn, sec_end_pfn; -unsigned long start, end;struct zone *zone =NULL ;struct page *page;int i;
@@ -1200,24 +1199,15 @@ int test_pages_in_a_zone(unsigned long start_pfn, unsigned long end_pfn,continue ;/* Check if we got outside of the zone */ if (zone && !zone_spans_pfn (zone, pfn + i)) -return 0 ; +return NULL ; page =pfn_to_page (pfn + i);if (zone &&page_zone (page) != zone) -return 0 ; -if (!zone) - start = pfn + i; +return NULL ; zone =page_zone (page); - end = pfn +MAX_ORDER_NR_PAGES ; } } -if (zone) { - *valid_start = start; - *valid_end =min (end, end_pfn); -return 1 ; - }else { -return 0 ; - } +return zone; }/*
@@ -1462,7 +1452,6 @@ static int __ref __offline_pages(unsigned long start_pfn,unsigned long offlined_pages =0 ;int ret, node, nr_isolate_pageblock;unsigned long flags; -unsigned long valid_start, valid_end;struct zone *zone;struct memory_notify arg;char *reason;
@@ -1487,14 +1476,12 @@ static int __ref __offline_pages(unsigned long start_pfn,/* This makes hotplug much easier...and readable. we assume this for now. .*/ -if (!test_pages_in_a_zone (start_pfn, end_pfn, &valid_start, - &valid_end)) { + zone =test_pages_in_a_zone (start_pfn, end_pfn); +if (!zone) { ret = -EINVAL ; reason ="multizone range" ; goto failed_removal; } - - zone =page_zone (pfn_to_page (valid_start)); node =zone_to_nid (zone);/* set above range as isolated */
Signature · 1 line
2.24.1
Andrew Morton
maintainerQuoted 3 lines · On Fri, 10 Jan 2020 19:33:08 +0100 David Hildenbrand <[email protected]> wrote:
The callers are only interested in the actual zone, they don't care about boundaries. Return the zone instead to simplify.
Any reviewers for this one?
From: David Hildenbrand <[email protected]>
Subject: mm/memory_hotplug: drop valid_start/valid_end from test_pages_in_a_zone()
The callers are only interested in the actual zone, they don't care about boundaries. Return the zone instead to simplify.
Signed-off-by David Hildenbrand <[email protected]>
Cc Greg Kroah-Hartman <[email protected]>
Cc "Rafael J. Wysocki" <[email protected]>
Cc Michal Hocko <[email protected]>
Cc Oscar Salvador <[email protected]>
Signed-off-by Andrew Morton <[email protected]>
---
drivers/base/memory.c | 9 ++++----- include/linux/memory_hotplug.h | 4 ++-- mm/memory_hotplug.c | 31 +++++++++---------------------- 3 files changed, 15 insertions(+), 29 deletions(-)
drivers/base/memory.c renamed from drivers/base/memory.c~mm-memory_hotplug-drop-valid_start-valid_end-from-test_pages_in_a_zone +4 -5
@@ -376,7 +376,6 @@ static ssize_t valid_zones_show(struct dstruct memory_block *mem =to_memory_block (dev);unsigned long start_pfn =section_nr_to_pfn (mem->start_section_nr);unsigned long nr_pages =PAGES_PER_SECTION * sections_per_block; -unsigned long valid_start_pfn, valid_end_pfn;struct zone *default_zone;int nid;
@@ -389,11 +388,11 @@ static ssize_t valid_zones_show(struct d* The block contains more than one zone can not be offlined. * This can happen e.g. for ZONE_DMA and ZONE_DMA32 */ -if (!test_pages_in_a_zone (start_pfn, start_pfn + nr_pages, - &valid_start_pfn, &valid_end_pfn)) + default_zone =test_pages_in_a_zone (start_pfn, + start_pfn + nr_pages); +if (!default_zone)return sprintf (buf,"none\n" ); - start_pfn = valid_start_pfn; -strcat (buf,page_zone (pfn_to_page (start_pfn))->name); +strcat (buf, default_zone->name); goto out; }
include/linux/memory_hotplug.h renamed from include/linux/memory_hotplug.h~mm-memory_hotplug-drop-valid_start-valid_end-from-test_pages_in_a_zone +2 -2
@@ -95,8 +95,8 @@ extern int zone_grow_waitqueues(struct zextern int add_one_highpage (struct page *page,int pfn,int bad_ppro);/* VM interface that may be used by firmware interface */ extern int online_pages (unsigned long ,unsigned long ,int ); -extern int test_pages_in_a_zone (unsigned long start_pfn,unsigned long end_pfn, -unsigned long *valid_start,unsigned long *valid_end); +extern struct zone *test_pages_in_a_zone (unsigned long start_pfn, +unsigned long end_pfn);extern unsigned long __offline_isolated_pages (unsigned long start_pfn,unsigned long end_pfn);
mm/memory_hotplug.c renamed from mm/memory_hotplug.c~mm-memory_hotplug-drop-valid_start-valid_end-from-test_pages_in_a_zone +9 -22
@@ -1206,14 +1206,13 @@ bool is_mem_section_removable(unsigned l }/* -* Confirm all pages in a range [start, end) belong to the same zone. -* When true, return its valid [start, end). +* Confirm all pages in a range [start, end) belong to the same zone (skipping +* memory holes). When true, return the zone. */ -int test_pages_in_a_zone (unsigned long start_pfn,unsigned long end_pfn, -unsigned long *valid_start,unsigned long *valid_end) +struct zone *test_pages_in_a_zone (unsigned long start_pfn, +unsigned long end_pfn) {unsigned long pfn, sec_end_pfn; -unsigned long start, end;struct zone *zone =NULL ;struct page *page;int i;
@@ -1234,24 +1233,15 @@ int test_pages_in_a_zone(unsigned long scontinue ;/* Check if we got outside of the zone */ if (zone && !zone_spans_pfn (zone, pfn + i)) -return 0 ; +return NULL ; page =pfn_to_page (pfn + i);if (zone &&page_zone (page) != zone) -return 0 ; -if (!zone) - start = pfn + i; +return NULL ; zone =page_zone (page); - end = pfn +MAX_ORDER_NR_PAGES ; } } -if (zone) { - *valid_start = start; - *valid_end =min (end, end_pfn); -return 1 ; - }else { -return 0 ; - } +return zone; }/*
@@ -1496,7 +1486,6 @@ static int __ref __offline_pages(unsigneunsigned long offlined_pages =0 ;int ret, node, nr_isolate_pageblock;unsigned long flags; -unsigned long valid_start, valid_end;struct zone *zone;struct memory_notify arg;char *reason;
@@ -1521,14 +1510,12 @@ static int __ref __offline_pages(unsigne/* This makes hotplug much easier...and readable. we assume this for now. .*/ -if (!test_pages_in_a_zone (start_pfn, end_pfn, &valid_start, - &valid_end)) { + zone =test_pages_in_a_zone (start_pfn, end_pfn); +if (!zone) { ret = -EINVAL ; reason ="multizone range" ; goto failed_removal; } - - zone =page_zone (pfn_to_page (valid_start)); node =zone_to_nid (zone);/* set above range as isolated */
_