Messages in this thread | | | Date | Wed, 14 Aug 2019 16:08:05 +0200 | From | Michal Hocko <> | Subject | Re: [PATCH v1 2/4] mm/memory_hotplug: Handle unaligned start and nr_pages in online_pages_blocks() |
| |
On Fri 09-08-19 14:56:59, David Hildenbrand wrote: > Take care of nr_pages not being a power of two and start not being > properly aligned. Essentially, what walk_system_ram_range() could provide > to us. get_order() will round-up in case it's not a power of two. > > This should only apply to memory blocks that contain strange memory > resources (especially with holes), not to ordinary DIMMs.
I would really like to see an example of such setup before making the code hard to read. Because I am not really sure something like that exists at all.
> Fixes: a9cd410a3d29 ("mm/page_alloc.c: memory hotplug: free pages as higher order") > Cc: Arun KS <arunks@codeaurora.org> > Cc: Andrew Morton <akpm@linux-foundation.org> > Cc: Oscar Salvador <osalvador@suse.de> > Cc: Michal Hocko <mhocko@suse.com> > Cc: Pavel Tatashin <pasha.tatashin@soleen.com> > Cc: Dan Williams <dan.j.williams@intel.com> > Signed-off-by: David Hildenbrand <david@redhat.com> > --- > mm/memory_hotplug.c | 4 ++++ > 1 file changed, 4 insertions(+) > > diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c > index 3706a137d880..2abd938c8c45 100644 > --- a/mm/memory_hotplug.c > +++ b/mm/memory_hotplug.c > @@ -640,6 +640,10 @@ static int online_pages_blocks(unsigned long start, unsigned long nr_pages) > while (start < end) { > order = min(MAX_ORDER - 1, > get_order(PFN_PHYS(end) - PFN_PHYS(start))); > + /* make sure the PFN is aligned and we don't exceed the range */ > + while (!IS_ALIGNED(start, 1ul << order) || > + (1ul << order) > end - start) > + order--; > (*online_page_callback)(pfn_to_page(start), order); > > onlined_pages += (1UL << order); > -- > 2.21.0
-- Michal Hocko SUSE Labs
| |