On Tue, 2019-04-09 at 12:01 +0200, David Hildenbrand wrote: > Let's just warn in case a section is not valid instead of failing to > remove somewhere in the middle of the process, returning an error > that > will be mostly ignored by callers. > > Cc: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> > Cc: Oscar Salvador <osalvador@xxxxxxx> > Cc: Michal Hocko <mhocko@xxxxxxxx> > Cc: David Hildenbrand <david@xxxxxxxxxx> > Cc: Pavel Tatashin <pasha.tatashin@xxxxxxxxxx> > Cc: Qian Cai <cai@xxxxxx> > Cc: Wei Yang <richard.weiyang@xxxxxxxxx> > Cc: Arun KS <arunks@xxxxxxxxxxxxxx> > Cc: Mathieu Malaterre <malat@xxxxxxxxxx> > Signed-off-by: David Hildenbrand <david@xxxxxxxxxx> Just a nit: I think this could be combined with patch#2. The only reason to fail in here is 1) !valid_section 2) !present_section. As I stated in patch#2, one cannot be without the other, so makes sense to rip present_section check from unregister_mem_section() as well. Then, you could combine both changelogs explaining the whole thing, and why we do not need the present_section check either. But the change looks good to me: Reviewed-by: Oscar Salvador <osalvador@xxxxxxx> > --- > mm/memory_hotplug.c | 22 +++++++++------------- > 1 file changed, 9 insertions(+), 13 deletions(-) > > diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c > index b0cb05748f99..17a60281c36f 100644 > --- a/mm/memory_hotplug.c > +++ b/mm/memory_hotplug.c > @@ -517,15 +517,15 @@ static void __remove_zone(struct zone *zone, > unsigned long start_pfn) > pgdat_resize_unlock(zone->zone_pgdat, &flags); > } > > -static int __remove_section(struct zone *zone, struct mem_section > *ms, > - unsigned long map_offset, struct vmem_altmap > *altmap) > +static void __remove_section(struct zone *zone, struct mem_section > *ms, > + unsigned long map_offset, > + struct vmem_altmap *altmap) > { > unsigned long start_pfn; > int scn_nr; > - int ret = -EINVAL; > > - if (!valid_section(ms)) > - return ret; > + if (WARN_ON_ONCE(!valid_section(ms))) > + return; > > unregister_memory_section(ms); > > @@ -534,7 +534,6 @@ static int __remove_section(struct zone *zone, > struct mem_section *ms, > __remove_zone(zone, start_pfn); > > sparse_remove_one_section(zone, ms, map_offset, altmap); > - return 0; > } > > /** > @@ -554,7 +553,7 @@ int __remove_pages(struct zone *zone, unsigned > long phys_start_pfn, > { > unsigned long i; > unsigned long map_offset = 0; > - int sections_to_remove, ret = 0; > + int sections_to_remove; > > /* In the ZONE_DEVICE case device driver owns the memory > region */ > if (is_dev_zone(zone)) { > @@ -575,16 +574,13 @@ int __remove_pages(struct zone *zone, unsigned > long phys_start_pfn, > unsigned long pfn = phys_start_pfn + > i*PAGES_PER_SECTION; > > cond_resched(); > - ret = __remove_section(zone, __pfn_to_section(pfn), > map_offset, > - altmap); > + __remove_section(zone, __pfn_to_section(pfn), > map_offset, > + altmap); > map_offset = 0; > - if (ret) > - break; > } > > set_zone_contiguous(zone); > - > - return ret; > + return 0; > } > #endif /* CONFIG_MEMORY_HOTREMOVE */ > -- Oscar Salvador SUSE L3