From: Jason Gunthorpe <jgg@nvidia.com>
To: John Hubbard <jhubbard@nvidia.com>
Cc: <linux-kernel@vger.kernel.org>,
Andrea Arcangeli <aarcange@redhat.com>,
Andrew Morton <akpm@linux-foundation.org>,
Christoph Hellwig <hch@lst.de>, Hugh Dickins <hughd@google.com>,
Jan Kara <jack@suse.cz>, Jann Horn <jannh@google.com>,
Kirill Shutemov <kirill@shutemov.name>,
Kirill Tkhai <ktkhai@virtuozzo.com>,
Linux-MM <linux-mm@kvack.org>, Michal Hocko <mhocko@suse.com>,
Oleg Nesterov <oleg@redhat.com>, Peter Xu <peterx@redhat.com>
Subject: Re: [PATCH 1/2] mm: reorganize internal_get_user_pages_fast()
Date: Mon, 26 Oct 2020 20:59:03 -0300 [thread overview]
Message-ID: <20201026235903.GE1523783@nvidia.com> (raw)
In-Reply-To: <16c50bb0-431d-5bfb-7b80-a8af0b4da90f@nvidia.com>
On Fri, Oct 23, 2020 at 09:44:17PM -0700, John Hubbard wrote:
> > Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
> > mm/gup.c | 88 +++++++++++++++++++++++++++++---------------------------
> > 1 file changed, 46 insertions(+), 42 deletions(-)
> >
> > diff --git a/mm/gup.c b/mm/gup.c
> > index 102877ed77a4b4..ecbe1639ea2af7 100644
> > +++ b/mm/gup.c
> > @@ -2671,13 +2671,42 @@ static int __gup_longterm_unlocked(unsigned long start, int nr_pages,
> > return ret;
> > }
> > +static unsigned int lockless_pages_from_mm(unsigned long addr,
>
> It would be slightly more consistent to use "start" here, too, instead of addr.
>
> Separately, I'm not joyful about the change to unsigned int for the
> return type. I understand why you did it and that's perfectly sound
> reasoning: there is no -ERRNO possible here, and nr_pinned will always
> be >=0. And it's correct, although it does have a type mismatch in the
> return value.
I did it because I had to check that ignoring a negative return or
doing some wonky negative arithmetic wasn't some sneaky beahvior. It
isn't, the value is really unsigned. So I documented it to save the
next person this work.
I think the proper response is to ultimately change the
gup_pgd_range() call tree to take the unsigned as well.
> a) change all the nr_pages and nr_pinned throughout, to "long", or
>
> b) change all the nr_pages and nr_pinned all function args, and use int
> return types throughout, as a "O or -ERRNO, only" return value
> convention.
The gup_pgd_range() this stuff largely does return
I think gup_pgd_range() works as it does due to
> > + start += (unsigned long)nr_pinned << PAGE_SHIFT;
> > + pages += nr_pinned;
> > + ret = __gup_longterm_unlocked(start, nr_pages - nr_pinned, gup_flags,
> > + pages);
> > + if (ret < 0) {
> > /* Have to be a bit careful with return values */
>
> ...and can we move that comment up one level, so that it reads:
>
> /* Have to be a bit careful with return values */
> if (ret < 0) {
> if (nr_pinned)
> return nr_pinned;
> return ret;
> }
> return ret + nr_pinned;
I actually deliberately put it inside the if because there is nothing
tricky about ret < 0, that is basically perfectly normal. It is only
the logic to drop the error code sometimes that is tricky..
> Thinking about this longer term, it would be nice if the whole gup/pup API
> set just stopped pretending that anyone cares about partial success, because
> they *don't*. If we had return values of "0 or -ERRNO" throughout, and an
> additional set of API wrappers that did some sort of limited retry just like
> some of the callers do, that would be a happier story.
It seems like a good idea to me
I'll get the other notes in a v2
Thanks,
Jason
next prev parent reply other threads:[~2020-10-26 23:59 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-10-24 0:19 [PATCH 0/2] Add a 'seqcount' between gup_fast and copy_page_range Jason Gunthorpe
2020-10-24 0:19 ` [PATCH 1/2] mm: reorganize internal_get_user_pages_fast() Jason Gunthorpe
2020-10-24 4:44 ` John Hubbard
2020-10-26 23:59 ` Jason Gunthorpe [this message]
2020-10-27 9:33 ` Jan Kara
2020-10-27 9:55 ` Christoph Hellwig
2020-10-28 6:00 ` John Hubbard
2020-10-27 13:15 ` Jason Gunthorpe
2020-10-28 6:00 ` John Hubbard
2020-10-28 6:05 ` John Hubbard
2020-10-24 0:19 ` [PATCH 2/2] mm: prevent gup_fast from racing with COW during fork Jason Gunthorpe
2020-10-24 5:19 ` John Hubbard
2020-10-24 5:31 ` John Hubbard
2020-10-26 23:49 ` Jason Gunthorpe
2020-10-27 0:14 ` Linus Torvalds
2020-10-27 11:32 ` Jason Gunthorpe
2020-10-27 0:35 ` John Hubbard
2020-10-27 7:32 ` John Hubbard
2020-11-02 3:25 ` [mm] e498078ae9: will-it-scale.per_thread_ops -1.4% regression kernel test robot
2020-10-24 5:14 ` [PATCH 0/2] Add a 'seqcount' between gup_fast and copy_page_range John Hubbard
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20201026235903.GE1523783@nvidia.com \
--to=jgg@nvidia.com \
--cc=aarcange@redhat.com \
--cc=akpm@linux-foundation.org \
--cc=hch@lst.de \
--cc=hughd@google.com \
--cc=jack@suse.cz \
--cc=jannh@google.com \
--cc=jhubbard@nvidia.com \
--cc=kirill@shutemov.name \
--cc=ktkhai@virtuozzo.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=mhocko@suse.com \
--cc=oleg@redhat.com \
--cc=peterx@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.