Re: [PATCH v3 3/4] mm/gup: add a range variant of unpin_user_pages_dirty_lock()
From: Jason Gunthorpe <jgg@ziepe.ca>
Date: 2021-02-10 23:18:52
Also in:
linux-mm, lkml
From: Jason Gunthorpe <jgg@ziepe.ca>
Date: 2021-02-10 23:18:52
Also in:
linux-mm, lkml
On Fri, Feb 05, 2021 at 08:41:26PM +0000, Joao Martins wrote:
Add a unpin_user_page_range_dirty_lock() API which takes a starting page and how many consecutive pages we want to unpin and optionally dirty. To that end, define another iterator for_each_compound_range() that operates in page ranges as opposed to page array. For users (like RDMA mr_dereg) where each sg represents a contiguous set of pages, we're able to more efficiently unpin pages without having to supply an array of pages much of what happens today with unpin_user_pages(). Suggested-by: Jason Gunthorpe <jgg@nvidia.com> Signed-off-by: Joao Martins <redacted> --- include/linux/mm.h | 2 ++ mm/gup.c | 62 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 64 insertions(+)
Reviewed-by: Jason Gunthorpe <jgg@nvidia.com>
+/** + * unpin_user_page_range_dirty_lock() - release and optionally dirty + * gup-pinned page range + * + * @page: the starting page of a range maybe marked dirty, and definitely released. + * @npages: number of consecutive pages to release. + * @make_dirty: whether to mark the pages dirty + * + * "gup-pinned page range" refers to a range of pages that has had one of the + * get_user_pages() variants called on that page.
Tidy this language though, this only works with the pin_user_pages variants because it hardwires FOLL_PIN Jason