lkml.org 
[lkml]   [2022]   [Jan]   [10]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    SubjectRe: [PATCH v2 01/28] gup: Remove for_each_compound_range()
    From
    On 1/9/22 20:23, Matthew Wilcox (Oracle) wrote:
    > This macro doesn't simplify the users; it's easier to just call
    > compound_range_next() inside the loop.
    >
    > Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
    > ---
    > mm/gup.c | 12 ++----------
    > 1 file changed, 2 insertions(+), 10 deletions(-)
    >
    > diff --git a/mm/gup.c b/mm/gup.c
    > index 2c51e9748a6a..7a07e0c00bf5 100644
    > --- a/mm/gup.c
    > +++ b/mm/gup.c
    > @@ -236,9 +236,6 @@ static inline void compound_range_next(unsigned long i, unsigned long npages,
    > struct page *next, *page;
    > unsigned int nr = 1;
    >
    > - if (i >= npages)
    > - return;
    > -
    > next = *list + i;
    > page = compound_head(next);
    > if (PageCompound(page) && compound_order(page) >= 1)
    > @@ -249,12 +246,6 @@ static inline void compound_range_next(unsigned long i, unsigned long npages,
    > *ntails = nr;
    > }
    >
    > -#define for_each_compound_range(__i, __list, __npages, __head, __ntails) \
    > - for (__i = 0, \
    > - compound_range_next(__i, __npages, __list, &(__head), &(__ntails)); \
    > - __i < __npages; __i += __ntails, \
    > - compound_range_next(__i, __npages, __list, &(__head), &(__ntails)))
    > -

    Yes!! Thank you.

    > static inline void compound_next(unsigned long i, unsigned long npages,
    > struct page **list, struct page **head,
    > unsigned int *ntails)
    > @@ -371,7 +362,8 @@ void unpin_user_page_range_dirty_lock(struct page *page, unsigned long npages,
    > struct page *head;
    > unsigned int ntails;
    >
    > - for_each_compound_range(index, &page, npages, head, ntails) {
    > + for (index = 0; index < npages; index += ntails) {
    > + compound_range_next(index, npages, &page, &head, &ntails);

    And now the code is more "honest and up front": items that are changed are
    passed by reference, and one can see right here what those are.


    > if (make_dirty && !PageDirty(head))
    > set_page_dirty_lock(head);
    > put_compound_head(head, ntails, FOLL_PIN);

    Reviewed-by: John Hubbard <jhubbard@nvidia.com>


    thanks,
    --
    John Hubbard
    NVIDIA

    \
     
     \ /
      Last update: 2022-01-11 02:08    [W:4.363 / U:0.000 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site