lkml.org 
[lkml]   [2019]   [Aug]   [12]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [RFC PATCH v2 15/19] mm/gup: Introduce vaddr_pin_pages()
    On Sun, Aug 11, 2019 at 04:07:23PM -0700, John Hubbard wrote:
    > On 8/9/19 3:58 PM, ira.weiny@intel.com wrote:
    > > From: Ira Weiny <ira.weiny@intel.com>
    > >
    > > The addition of FOLL_LONGTERM has taken on additional meaning for CMA
    > > pages.
    > >
    > > In addition subsystems such as RDMA require new information to be passed
    > > to the GUP interface to track file owning information. As such a simple
    > > FOLL_LONGTERM flag is no longer sufficient for these users to pin pages.
    > >
    > > Introduce a new GUP like call which takes the newly introduced vaddr_pin
    > > information. Failure to pass the vaddr_pin object back to a vaddr_put*
    > > call will result in a failure if pins were created on files during the
    > > pin operation.
    > >
    > > Signed-off-by: Ira Weiny <ira.weiny@intel.com>
    > >
    >
    > I'm creating a new call site conversion series, to replace the
    > "put_user_pages(): miscellaneous call sites" series. This uses
    > vaddr_pin_pages*() where appropriate. So it's based on your series here.
    >
    > btw, while doing that, I noticed one more typo while re-reading some of the comments.
    > Thought you probably want to collect them all for the next spin. Below...
    >
    > > ---
    > > Changes from list:
    > > Change to vaddr_put_pages_dirty_lock
    > > Change to vaddr_unpin_pages_dirty_lock
    > >
    > > include/linux/mm.h | 5 ++++
    > > mm/gup.c | 59 ++++++++++++++++++++++++++++++++++++++++++++++
    > > 2 files changed, 64 insertions(+)
    > >
    > > diff --git a/include/linux/mm.h b/include/linux/mm.h
    > > index 657c947bda49..90c5802866df 100644
    > > --- a/include/linux/mm.h
    > > +++ b/include/linux/mm.h
    > > @@ -1603,6 +1603,11 @@ int account_locked_vm(struct mm_struct *mm, unsigned long pages, bool inc);
    > > int __account_locked_vm(struct mm_struct *mm, unsigned long pages, bool inc,
    > > struct task_struct *task, bool bypass_rlim);
    > >
    > > +long vaddr_pin_pages(unsigned long addr, unsigned long nr_pages,
    > > + unsigned int gup_flags, struct page **pages,
    > > + struct vaddr_pin *vaddr_pin);
    > > +void vaddr_unpin_pages_dirty_lock(struct page **pages, unsigned long nr_pages,
    > > + struct vaddr_pin *vaddr_pin, bool make_dirty);
    > > bool mapping_inode_has_layout(struct vaddr_pin *vaddr_pin, struct page *page);
    > >
    > > /* Container for pinned pfns / pages */
    > > diff --git a/mm/gup.c b/mm/gup.c
    > > index eeaa0ddd08a6..6d23f70d7847 100644
    > > --- a/mm/gup.c
    > > +++ b/mm/gup.c
    > > @@ -2536,3 +2536,62 @@ int get_user_pages_fast(unsigned long start, int nr_pages,
    > > return ret;
    > > }
    > > EXPORT_SYMBOL_GPL(get_user_pages_fast);
    > > +
    > > +/**
    > > + * vaddr_pin_pages pin pages by virtual address and return the pages to the
    > > + * user.
    > > + *
    > > + * @addr, start address
    > > + * @nr_pages, number of pages to pin
    > > + * @gup_flags, flags to use for the pin
    > > + * @pages, array of pages returned
    > > + * @vaddr_pin, initalized meta information this pin is to be associated
    >
    > Typo:
    > initialized

    Thanks fixed.
    Ira

    >
    >
    > thanks,
    > --
    > John Hubbard
    > NVIDIA

    \
     
     \ /
      Last update: 2019-08-12 23:02    [W:7.192 / U:0.068 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site