> > Factor out the code that fills the subsection map from section_activate() > into fill_subsection_map(), this makes section_activate() cleaner and > easier to follow. > > Signed-off-by: Baoquan He <bhe@xxxxxxxxxx> > Reviewed-by: Wei Yang <richard.weiyang@xxxxxxxxx> > Reviewed-by: David Hildenbrand <david@xxxxxxxxxx> > --- > mm/sparse.c | 32 +++++++++++++++++++++----------- > 1 file changed, 21 insertions(+), 11 deletions(-) > > diff --git a/mm/sparse.c b/mm/sparse.c > index cf28505e82c5..5919bc5b1547 100644 > --- a/mm/sparse.c > +++ b/mm/sparse.c > @@ -792,24 +792,15 @@ static void section_deactivate(unsigned long pfn, unsigned long nr_pages, > ms->section_mem_map = (unsigned long)NULL; > } > > -static struct page * __meminit section_activate(int nid, unsigned long pfn, > - unsigned long nr_pages, struct vmem_altmap *altmap) > +static int fill_subsection_map(unsigned long pfn, unsigned long nr_pages) > { > - DECLARE_BITMAP(map, SUBSECTIONS_PER_SECTION) = { 0 }; > struct mem_section *ms = __pfn_to_section(pfn); > - struct mem_section_usage *usage = NULL; > + DECLARE_BITMAP(map, SUBSECTIONS_PER_SECTION) = { 0 }; > unsigned long *subsection_map; > - struct page *memmap; > int rc = 0; > > subsection_mask_set(map, pfn, nr_pages); > > - if (!ms->usage) { > - usage = kzalloc(mem_section_usage_size(), GFP_KERNEL); > - if (!usage) > - return ERR_PTR(-ENOMEM); > - ms->usage = usage; > - } > subsection_map = &ms->usage->subsection_map[0]; > > if (bitmap_empty(map, SUBSECTIONS_PER_SECTION)) > @@ -820,6 +811,25 @@ static struct page * __meminit section_activate(int nid, unsigned long pfn, > bitmap_or(subsection_map, map, subsection_map, > SUBSECTIONS_PER_SECTION); > > + return rc; > +} > + > +static struct page * __meminit section_activate(int nid, unsigned long pfn, > + unsigned long nr_pages, struct vmem_altmap *altmap) > +{ > + struct mem_section *ms = __pfn_to_section(pfn); > + struct mem_section_usage *usage = NULL; > + struct page *memmap; > + int rc = 0; > + > + if (!ms->usage) { > + usage = kzalloc(mem_section_usage_size(), GFP_KERNEL); > + if (!usage) > + return ERR_PTR(-ENOMEM); > + ms->usage = usage; > + } > + > + rc = fill_subsection_map(pfn, nr_pages); > if (rc) { > if (usage) > ms->usage = NULL; > -- Acked-by: Pankaj Gupta <pankaj.gupta.linux@xxxxxxxxx> > 2.17.2 > >