On Thu, Feb 6, 2020 at 3:17 PM Wei Yang <richardw.yang@xxxxxxxxxxxxxxx> wrote: > > Only when SPARSEMEM_VMEMMAP is set, memmap returned from > section_activate() points to sub-section page struct. Otherwise, memmap > already points to the whole section page struct. > > This means only for SPARSEMEM_VMEMMAP, we need to adjust memmap for > sub-section case. > > Fixes: ba72b4c8cf60 ("mm/sparsemem: support sub-section hotplug") > Signed-off-by: Wei Yang <richardw.yang@xxxxxxxxxxxxxxx> > CC: Dan Williams <dan.j.williams@xxxxxxxxx> > --- > mm/sparse.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/mm/sparse.c b/mm/sparse.c > index 586d85662978..b5da121bdd6e 100644 > --- a/mm/sparse.c > +++ b/mm/sparse.c > @@ -886,7 +886,8 @@ int __meminit sparse_add_section(int nid, unsigned long start_pfn, > section_mark_present(ms); > > /* Align memmap to section boundary in the subsection case */ > - if (section_nr_to_pfn(section_nr) != start_pfn) > + if (IS_ENABLED(CONFIG_SPARSEMEM_VMEMMAP) && > + section_nr_to_pfn(section_nr) != start_pfn) Aren't we assured that start_pfn is always section aligned in the SPARSEMEM case? That's the role of check_pfn_span(). Does the change have a runtime impact or is this just theoretical?