Re: [PATCH v3 00/23] mm/gup: track dma-pinned pages: FOLL_PIN, FOLL_LONGTERM

Daniel Vetter
2019-11-13T11:43:19Z

On Wed, Nov 13, 2019 at 11:12:10AM +0100, Jan Kara wrote:
> On Wed 13-11-19 01:02:02, John Hubbard wrote:
> > On 11/13/19 12:22 AM, Daniel Vetter wrote:
> > ...
> > > > > Why are we doing this? I think things got confused here someplace, as
> > > >
> > > >
> > > > Because:
> > > >
> > > > a) These need put_page() calls, and
> > > >
> > > > b) there is no put_pages() call, but there is a release_pages() call that
> > > > is, arguably, what put_pages() would be.
> > > >
> > > >
> > > > > the comment still says:
> > > > >
> > > > > /**
> > > > > * put_user_page() - release a gup-pinned page
> > > > > * @page: pointer to page to be released
> > > > > *
> > > > > * Pages that were pinned via get_user_pages*() must be released via
> > > > > * either put_user_page(), or one of the put_user_pages*() routines
> > > > > * below.
> > > >
> > > >
> > > > Ohhh, I missed those comments. They need to all be changed over to
> > > > say "pages that were pinned via pin_user_pages*() or
> > > > pin_longterm_pages*() must be released via put_user_page*()."
> > > >
> > > > The get_user_pages*() pages must still be released via put_page.
> > > >
> > > > The churn is due to a fairly significant change in strategy, whis
> > > > is: instead of changing all get_user_pages*() sites to call
> > > > put_user_page(), change selected sites to call pin_user_pages*() or
> > > > pin_longterm_pages*(), plus put_user_page().
> > >
> > > Can't we call this unpin_user_page then, for some symmetry? Or is that
> > > even more churn?
> > >
> > > Looking from afar the naming here seems really confusing.
> >
> >
> > That look from afar is valuable, because I'm too close to the problem to see
> > how the naming looks. :)
> >
> > unpin_user_page() sounds symmetrical. It's true that it would cause more
> > churn (which is why I started off with a proposal that avoids changing the
> > names of put_user_page*() APIs). But OTOH, the amount of churn is proportional
> > to the change in direction here, and it's really only 10 or 20 lines changed,
> > in the end.
> >
> > So I'm open to changing to that naming. It would be nice to hear what others
> > prefer, too...
>
> FWIW I'd find unpin_user_page() also better than put_user_page() as a
> counterpart to pin_user_pages().

One more point from afar on pin/unpin: We use that a lot in graphics for
permanently pinned graphics buffer objects. Which really only should be
used for scanout. So at least graphics folks should have an appropriate
mindset and try to make sure we don't overuse this stuff.
-Daniel
--
Daniel Vetter
Software Engineer, Intel Corporation