[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <88d82639-c0b2-0b35-1919-999a8438031c@nvidia.com>
Date: Sun, 11 Aug 2019 16:07:23 -0700
From: John Hubbard <jhubbard@...dia.com>
To: <ira.weiny@...el.com>, Andrew Morton <akpm@...ux-foundation.org>
CC: Jason Gunthorpe <jgg@...pe.ca>,
Dan Williams <dan.j.williams@...el.com>,
Matthew Wilcox <willy@...radead.org>, Jan Kara <jack@...e.cz>,
Theodore Ts'o <tytso@....edu>, Michal Hocko <mhocko@...e.com>,
Dave Chinner <david@...morbit.com>,
<linux-xfs@...r.kernel.org>, <linux-rdma@...r.kernel.org>,
<linux-kernel@...r.kernel.org>, <linux-fsdevel@...r.kernel.org>,
<linux-nvdimm@...ts.01.org>, <linux-ext4@...r.kernel.org>,
<linux-mm@...ck.org>
Subject: Re: [RFC PATCH v2 15/19] mm/gup: Introduce vaddr_pin_pages()
On 8/9/19 3:58 PM, ira.weiny@...el.com wrote:
> From: Ira Weiny <ira.weiny@...el.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@...el.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,
--
John Hubbard
NVIDIA
Powered by blists - more mailing lists