All of lore.kernel.org
 help / color / mirror / Atom feed
From: Souptick Joarder <jrdr.linux@gmail.com>
To: John Hubbard <jhubbard@nvidia.com>
Cc: Andrew Morton <akpm@linux-foundation.org>,
	LKML <linux-kernel@vger.kernel.org>,
	Linux-MM <linux-mm@kvack.org>
Subject: Re: [PATCH 1/2] mm/gup: introduce pin_user_pages_locked()
Date: Sun, 31 May 2020 12:43:23 +0530	[thread overview]
Message-ID: <CAFqt6zaz21GQZYSGZ5Md0hCrPv8UFQ7gQMiV_oBzX0zSTZ16-A@mail.gmail.com> (raw)
In-Reply-To: <CAFqt6zZr9rUZaXEpjwmtmicdNP9KhJ8UrjPPjk4bMHJ20VsVsg@mail.gmail.com>

On Sun, May 31, 2020 at 12:34 PM Souptick Joarder <jrdr.linux@gmail.com> wrote:
>
> On Thu, May 28, 2020 at 4:02 AM John Hubbard <jhubbard@nvidia.com> wrote:
> >
> > Introduce pin_user_pages_locked(), which is nearly identical to
> > get_user_pages_locked() except that it sets FOLL_PIN and rejects
> > FOLL_GET.

Forget to ask, is it fine to add this new pin_user_pages_locked() in
Documentation/core-api/pin_user_pages.rst ?

> >
> > Signed-off-by: John Hubbard <jhubbard@nvidia.com>
> > ---
> >  include/linux/mm.h |  2 ++
> >  mm/gup.c           | 30 ++++++++++++++++++++++++++++++
> >  2 files changed, 32 insertions(+)
> >
> > diff --git a/include/linux/mm.h b/include/linux/mm.h
> > index 98be7289d7e9..d16951087c93 100644
> > --- a/include/linux/mm.h
> > +++ b/include/linux/mm.h
> > @@ -1700,6 +1700,8 @@ long pin_user_pages(unsigned long start, unsigned long nr_pages,
> >                     struct vm_area_struct **vmas);
> >  long get_user_pages_locked(unsigned long start, unsigned long nr_pages,
> >                     unsigned int gup_flags, struct page **pages, int *locked);
> > +long pin_user_pages_locked(unsigned long start, unsigned long nr_pages,
> > +                   unsigned int gup_flags, struct page **pages, int *locked);
> >  long get_user_pages_unlocked(unsigned long start, unsigned long nr_pages,
> >                     struct page **pages, unsigned int gup_flags);
> >  long pin_user_pages_unlocked(unsigned long start, unsigned long nr_pages,
> > diff --git a/mm/gup.c b/mm/gup.c
> > index 2f0a0b497c23..17418a949067 100644
> > --- a/mm/gup.c
> > +++ b/mm/gup.c
> > @@ -2992,3 +2992,33 @@ long pin_user_pages_unlocked(unsigned long start, unsigned long nr_pages,
> >         return get_user_pages_unlocked(start, nr_pages, pages, gup_flags);
> >  }
> >  EXPORT_SYMBOL(pin_user_pages_unlocked);
> > +
> > +/*
> > + * pin_user_pages_locked() is the FOLL_PIN variant of get_user_pages_locked().
> > + * Behavior is the same, except that this one sets FOLL_PIN and rejects
> > + * FOLL_GET.
> > + */
> > +long pin_user_pages_locked(unsigned long start, unsigned long nr_pages,
> > +                          unsigned int gup_flags, struct page **pages,
> > +                          int *locked)
> > +{
> > +       /*
> > +        * FIXME: Current FOLL_LONGTERM behavior is incompatible with
> > +        * FAULT_FLAG_ALLOW_RETRY because of the FS DAX check requirement on
> > +        * vmas.  As there are no users of this flag in this call we simply
> > +        * disallow this option for now.
> > +        */
> > +       if (WARN_ON_ONCE(gup_flags & FOLL_LONGTERM))
> > +               return -EINVAL;
> > +
> > +       /* FOLL_GET and FOLL_PIN are mutually exclusive. */
> > +       if (WARN_ON_ONCE(gup_flags & FOLL_GET))
> > +               return -EINVAL;
> > +
> > +       gup_flags |= FOLL_PIN;
>
> Right now get_user_pages_locked() doesn't have similar check for FOLL_PIN
> and also not setting FOLL_GET internally irrespective of gup_flags
> passed by user.
> Do we need to add the same in get_user_pages_locked() ?
>
> > +       return __get_user_pages_locked(current, current->mm, start, nr_pages,
> > +                                      pages, NULL, locked,
> > +                                      gup_flags | FOLL_TOUCH);
> > +}
> > +EXPORT_SYMBOL(pin_user_pages_locked);
> > +
> > --
> > 2.26.2
> >
> >

  reply	other threads:[~2020-05-31  7:05 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-05-27 22:32 [PATCH 0/2] mm/gup: introduce pin_user_pages_locked(), use it in frame_vector.c John Hubbard
2020-05-27 22:32 ` [PATCH 1/2] mm/gup: introduce pin_user_pages_locked() John Hubbard
2020-05-28  8:43   ` David Hildenbrand
2020-05-31  7:04   ` Souptick Joarder
2020-05-31  7:04     ` Souptick Joarder
2020-05-31  7:13     ` Souptick Joarder [this message]
2020-05-31  7:13       ` Souptick Joarder
2020-05-31 19:56       ` John Hubbard
2020-05-31 19:52     ` John Hubbard
2020-05-31 13:03   ` Pankaj Gupta
2020-05-31 13:03     ` Pankaj Gupta
2020-05-27 22:32 ` [PATCH 2/2] mm/gup: frame_vector: convert get_user_pages() --> pin_user_pages() John Hubbard
2020-05-28  8:46   ` David Hildenbrand

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=CAFqt6zaz21GQZYSGZ5Md0hCrPv8UFQ7gQMiV_oBzX0zSTZ16-A@mail.gmail.com \
    --to=jrdr.linux@gmail.com \
    --cc=akpm@linux-foundation.org \
    --cc=jhubbard@nvidia.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    /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.