On Sun, Oct 06, 2019 at 10:56:46AM +0200, David Hildenbrand wrote:
> Let's drop the basically unused section stuff and simplify.
> 
> Also, let's use a shorter variant to calculate the number of pages to
> the next section boundary.
> 
> Cc: Andrew Morton <[email protected]>
> Cc: Oscar Salvador <[email protected]>
> Cc: Michal Hocko <[email protected]>
> Cc: Pavel Tatashin <[email protected]>
> Cc: Dan Williams <[email protected]>
> Cc: Wei Yang <[email protected]>
> Signed-off-by: David Hildenbrand <[email protected]>

I have to confess that it took me while to wrap around my head
with the new min() change, but looks ok:

Reviewed-by: Oscar Salvador <[email protected]>

> ---
>  mm/memory_hotplug.c | 17 ++++++-----------
>  1 file changed, 6 insertions(+), 11 deletions(-)
> 
> diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c
> index 843481bd507d..2275240cfa10 100644
> --- a/mm/memory_hotplug.c
> +++ b/mm/memory_hotplug.c
> @@ -490,25 +490,20 @@ static void __remove_section(unsigned long pfn, 
> unsigned long nr_pages,
>  void __remove_pages(unsigned long pfn, unsigned long nr_pages,
>                   struct vmem_altmap *altmap)
>  {
> +     const unsigned long end_pfn = pfn + nr_pages;
> +     unsigned long cur_nr_pages;
>       unsigned long map_offset = 0;
> -     unsigned long nr, start_sec, end_sec;
>  
>       map_offset = vmem_altmap_offset(altmap);
>  
>       if (check_pfn_span(pfn, nr_pages, "remove"))
>               return;
>  
> -     start_sec = pfn_to_section_nr(pfn);
> -     end_sec = pfn_to_section_nr(pfn + nr_pages - 1);
> -     for (nr = start_sec; nr <= end_sec; nr++) {
> -             unsigned long pfns;
> -
> +     for (; pfn < end_pfn; pfn += cur_nr_pages) {
>               cond_resched();
> -             pfns = min(nr_pages, PAGES_PER_SECTION
> -                             - (pfn & ~PAGE_SECTION_MASK));
> -             __remove_section(pfn, pfns, map_offset, altmap);
> -             pfn += pfns;
> -             nr_pages -= pfns;
> +             /* Select all remaining pages up to the next section boundary */
> +             cur_nr_pages = min(end_pfn - pfn, -(pfn | PAGE_SECTION_MASK));
> +             __remove_section(pfn, cur_nr_pages, map_offset, altmap);
>               map_offset = 0;
>       }
>  }
> -- 
> 2.21.0
> 
> 

-- 
Oscar Salvador
SUSE L3

Reply via email to