Messages in this thread | | | Subject | Re: [PATCH v2 1/4] mm/gup: add compound page list iterator | From | John Hubbard <> | Date | Fri, 5 Feb 2021 11:53:58 -0800 |
| |
On 2/5/21 2:46 AM, Joao Martins wrote: ...>> If instead you keep npages constant like it naturally wants to be, you could >> just do a "(*ntails)++" in the loop, to take care of *ntails. >> > I didn't do it as such as I would need to deref @ntails per iteration, so > it felt more efficient to do as above. On a second thought, I could alternatively do the > following below, thoughts? > > diff --git a/mm/gup.c b/mm/gup.c > index d68bcb482b11..8defe4f670d5 100644 > --- a/mm/gup.c > +++ b/mm/gup.c > @@ -215,6 +215,32 @@ void unpin_user_page(struct page *page) > } > EXPORT_SYMBOL(unpin_user_page); > > +static inline void compound_next(unsigned long i, unsigned long npages, > + struct page **list, struct page **head, > + unsigned int *ntails) > +{ > + struct page *page; > + unsigned int nr; > + > + if (i >= npages) > + return; > + > + page = compound_head(list[i]); > + for (nr = i + 1; nr < npages; nr++) { > + if (compound_head(list[nr]) != page) > + break; > + } > + > + *head = page; > + *ntails = nr - i; > +} > +
Yes, this is cleaner and quite a bit easier to verify that it is correct.
> >> However, given that the patch is correct and works as-is, the above is really just >> an optional idea, so please feel free to add: >> >> Reviewed-by: John Hubbard <jhubbard@nvidia.com> >> >> > Thanks! > > Hopefully I can retain that if the snippet above is preferred? > > Joao >
Yes. Still looks good.
thanks, -- John Hubbard NVIDIA
| |