All of lore.kernel.org
 help / color / mirror / Atom feed
From: Dan Carpenter <dan.carpenter@oracle.com>
To: Souptick Joarder <jrdr.linux@gmail.com>
Cc: John Hubbard <jhubbard@nvidia.com>,
	"open list:ANDROID DRIVERS" <devel@driverdev.osuosl.org>,
	Greg KH <gregkh@linuxfoundation.org>,
	linux-kernel@vger.kernel.org, Rob Springer <rspringer@google.com>,
	Todd Poynor <toddpoynor@google.com>
Subject: Re: [PATCH] staging: gasket: Convert get_user_pages*() --> pin_user_pages*()
Date: Fri, 29 May 2020 10:46:58 +0300	[thread overview]
Message-ID: <20200529074658.GM30374@kadam> (raw)
In-Reply-To: <CAFqt6zbtg0NWbAnDGPC0ZddEiTeohz=8JN+S_KxqM0bnnvar3g@mail.gmail.com>

On Fri, May 29, 2020 at 11:57:09AM +0530, Souptick Joarder wrote:
> On Fri, May 29, 2020 at 11:46 AM Souptick Joarder <jrdr.linux@gmail.com> wrote:
> >
> > On Thu, May 28, 2020 at 4:34 PM Dan Carpenter <dan.carpenter@oracle.com> wrote:
> > >
> > > On Thu, May 28, 2020 at 02:32:42AM +0530, Souptick Joarder wrote:
> > > > This code was using get_user_pages_fast(), in a "Case 2" scenario
> > > > (DMA/RDMA), using the categorization from [1]. That means that it's
> > > > time to convert the get_user_pages_fast() + put_page() calls to
> > > > pin_user_pages_fast() + unpin_user_page() calls.
> > >
> > > You are saying that the page is used for DIO and not DMA, but it sure
> > > looks to me like it is used for DMA.
> >
> > No, I was referring to "Case 2" scenario in change log which means  it is
> > used for DMA, not DIO.

You can't use pin_user_pages() for DMA.  This was second reason that I
was confused.

mm/gup.c
  2863  /**
  2864   * pin_user_pages_fast() - pin user pages in memory without taking locks
  2865   *
  2866   * @start:      starting user address
  2867   * @nr_pages:   number of pages from start to pin
  2868   * @gup_flags:  flags modifying pin behaviour
  2869   * @pages:      array that receives pointers to the pages pinned.
  2870   *              Should be at least nr_pages long.
  2871   *
  2872   * Nearly the same as get_user_pages_fast(), except that FOLL_PIN is set. See
  2873   * get_user_pages_fast() for documentation on the function arguments, because
  2874   * the arguments here are identical.
  2875   *
  2876   * FOLL_PIN means that the pages must be released via unpin_user_page(). Please
  2877   * see Documentation/core-api/pin_user_pages.rst for further details.
  2878   *
  2879   * This is intended for Case 1 (DIO) in Documentation/core-api/pin_user_pages.rst. It
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  2880   * is NOT intended for Case 2 (RDMA: long-term pins).
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  2881   */
  2882  int pin_user_pages_fast(unsigned long start, int nr_pages,
  2883                          unsigned int gup_flags, struct page **pages)
  2884  {
  2885          /* FOLL_GET and FOLL_PIN are mutually exclusive. */
  2886          if (WARN_ON_ONCE(gup_flags & FOLL_GET))
  2887                  return -EINVAL;
  2888  
  2889          gup_flags |= FOLL_PIN;
  2890          return internal_get_user_pages_fast(start, nr_pages, gup_flags, pages);
  2891  }
  2892  EXPORT_SYMBOL_GPL(pin_user_pages_fast);

regards,
dan carpenter


WARNING: multiple messages have this Message-ID
From: Dan Carpenter <dan.carpenter@oracle.com>
To: Souptick Joarder <jrdr.linux@gmail.com>
Cc: "open list:ANDROID DRIVERS" <devel@driverdev.osuosl.org>,
	John Hubbard <jhubbard@nvidia.com>,
	linux-kernel@vger.kernel.org, Rob Springer <rspringer@google.com>,
	Greg KH <gregkh@linuxfoundation.org>,
	Todd Poynor <toddpoynor@google.com>
Subject: Re: [PATCH] staging: gasket: Convert get_user_pages*() --> pin_user_pages*()
Date: Fri, 29 May 2020 10:46:58 +0300	[thread overview]
Message-ID: <20200529074658.GM30374@kadam> (raw)
In-Reply-To: <CAFqt6zbtg0NWbAnDGPC0ZddEiTeohz=8JN+S_KxqM0bnnvar3g@mail.gmail.com>

On Fri, May 29, 2020 at 11:57:09AM +0530, Souptick Joarder wrote:
> On Fri, May 29, 2020 at 11:46 AM Souptick Joarder <jrdr.linux@gmail.com> wrote:
> >
> > On Thu, May 28, 2020 at 4:34 PM Dan Carpenter <dan.carpenter@oracle.com> wrote:
> > >
> > > On Thu, May 28, 2020 at 02:32:42AM +0530, Souptick Joarder wrote:
> > > > This code was using get_user_pages_fast(), in a "Case 2" scenario
> > > > (DMA/RDMA), using the categorization from [1]. That means that it's
> > > > time to convert the get_user_pages_fast() + put_page() calls to
> > > > pin_user_pages_fast() + unpin_user_page() calls.
> > >
> > > You are saying that the page is used for DIO and not DMA, but it sure
> > > looks to me like it is used for DMA.
> >
> > No, I was referring to "Case 2" scenario in change log which means  it is
> > used for DMA, not DIO.

You can't use pin_user_pages() for DMA.  This was second reason that I
was confused.

mm/gup.c
  2863  /**
  2864   * pin_user_pages_fast() - pin user pages in memory without taking locks
  2865   *
  2866   * @start:      starting user address
  2867   * @nr_pages:   number of pages from start to pin
  2868   * @gup_flags:  flags modifying pin behaviour
  2869   * @pages:      array that receives pointers to the pages pinned.
  2870   *              Should be at least nr_pages long.
  2871   *
  2872   * Nearly the same as get_user_pages_fast(), except that FOLL_PIN is set. See
  2873   * get_user_pages_fast() for documentation on the function arguments, because
  2874   * the arguments here are identical.
  2875   *
  2876   * FOLL_PIN means that the pages must be released via unpin_user_page(). Please
  2877   * see Documentation/core-api/pin_user_pages.rst for further details.
  2878   *
  2879   * This is intended for Case 1 (DIO) in Documentation/core-api/pin_user_pages.rst. It
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  2880   * is NOT intended for Case 2 (RDMA: long-term pins).
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  2881   */
  2882  int pin_user_pages_fast(unsigned long start, int nr_pages,
  2883                          unsigned int gup_flags, struct page **pages)
  2884  {
  2885          /* FOLL_GET and FOLL_PIN are mutually exclusive. */
  2886          if (WARN_ON_ONCE(gup_flags & FOLL_GET))
  2887                  return -EINVAL;
  2888  
  2889          gup_flags |= FOLL_PIN;
  2890          return internal_get_user_pages_fast(start, nr_pages, gup_flags, pages);
  2891  }
  2892  EXPORT_SYMBOL_GPL(pin_user_pages_fast);

regards,
dan carpenter

_______________________________________________
devel mailing list
devel@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel

  parent reply	other threads:[~2020-05-29  7:47 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-05-27 21:02 [PATCH] staging: gasket: Convert get_user_pages*() --> pin_user_pages*() Souptick Joarder
2020-05-27 21:02 ` Souptick Joarder
2020-05-28 11:04 ` Dan Carpenter
2020-05-28 11:04   ` Dan Carpenter
2020-05-29  6:16   ` Souptick Joarder
2020-05-29  6:16     ` Souptick Joarder
2020-05-29  6:27     ` Souptick Joarder
2020-05-29  6:27       ` Souptick Joarder
2020-05-29  7:38       ` John Hubbard
2020-05-29  7:38         ` John Hubbard
2020-05-29  7:45         ` Dan Carpenter
2020-05-29  7:45           ` Dan Carpenter
2020-05-29  7:46       ` Dan Carpenter [this message]
2020-05-29  7:46         ` Dan Carpenter
2020-05-29  8:00         ` John Hubbard
2020-05-29  8:00           ` John Hubbard
2020-05-29 11:53   ` Dan Carpenter
2020-05-29 11:53     ` Dan Carpenter
2020-05-29 20:28     ` John Hubbard
2020-05-29 20:28       ` John Hubbard
2020-05-31  7:23 Souptick Joarder
2020-05-31  7:23 ` Souptick Joarder
2020-05-31  8:59 ` Dan Carpenter
2020-05-31  8:59   ` Dan Carpenter

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=20200529074658.GM30374@kadam \
    --to=dan.carpenter@oracle.com \
    --cc=devel@driverdev.osuosl.org \
    --cc=gregkh@linuxfoundation.org \
    --cc=jhubbard@nvidia.com \
    --cc=jrdr.linux@gmail.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=rspringer@google.com \
    --cc=toddpoynor@google.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.