Re: [PATCH v3 2/2] mm/sparse: start using sparse_init_nid(), and remove old code

From: Pavel Tatashin
Date: Mon Jul 02 2018 - 16:12:55 EST


On Mon, Jul 2, 2018 at 4:00 PM Dave Hansen <dave.hansen@xxxxxxxxx> wrote:
>
> On 07/02/2018 12:54 PM, Pavel Tatashin wrote:
> >
> >
> > On 07/02/2018 03:47 PM, Dave Hansen wrote:
> >> On 07/01/2018 07:04 PM, Pavel Tatashin wrote:
> >>> + for_each_present_section_nr(pnum_begin + 1, pnum_end) {
> >>> + int nid = sparse_early_nid(__nr_to_section(pnum_end));
> >>>
> >>> + if (nid == nid_begin) {
> >>> + map_count++;
> >>> continue;
> >>> }
> >>
> >>> + sparse_init_nid(nid_begin, pnum_begin, pnum_end, map_count);
> >>> + nid_begin = nid;
> >>> + pnum_begin = pnum_end;
> >>> + map_count = 1;
> >>> }
> >>
> >> Ugh, this is really hard to read. Especially because the pnum "counter"
> >> is called "pnum_end".
> >
> > I called it pnum_end, because that is what is passed to
> > sparse_init_nid(), but I see your point, and I can rename pnum_end to
> > simply pnum if that will make things look better.
>
> Could you just make it a helper that takes a beginning pnum and returns
> the number of consecutive sections?

But sections do not have to be consequent. Some nodes may have
sections that are not present. So we are looking for two values:
map_count -> which is number of present sections and node_end for the
current node i.e. the first section of the next node. So the helper
would need to return two things, and would basically repeat the same
code that is done in this function.

>
> >> So, this is basically a loop that collects all of the adjacent sections
> >> in a given single nid and then calls sparse_init_nid(). pnum_end in
> >> this case is non-inclusive, so the sparse_init_nid() call is actually
> >> for the *previous* nid that pnum_end is pointing _past_.
> >>
> >> This *really* needs commenting.
> >
> > There is a comment before sparse_init_nid() about inclusiveness:
> >
> > 434 /*
> > 435 * Initialize sparse on a specific node. The node spans [pnum_begin, pnum_end)
> > 436 * And number of present sections in this node is map_count.
> > 437 */
> > 438 static void __init sparse_init_nid(int nid, unsigned long pnum_begin,
> > 439 unsigned long pnum_end,
> > 440 unsigned long map_count)
>
> Which I totally missed. Could you comment the code, please?

Sure, I will add a comment into sparse_init() as well.