* [PATCH 0/1] IB/umem: use get_user_pages_fast() to pin DMA pages @ 2019-11-09 2:04 John Hubbard 2019-11-09 2:04 ` [PATCH 1/1] " John Hubbard 0 siblings, 1 reply; 5+ messages in thread From: John Hubbard @ 2019-11-09 2:04 UTC (permalink / raw) To: Andrew Morton, Jason Gunthorpe Cc: Ira Weiny, linux-rdma, linux-mm, LKML, John Hubbard Hi Jason, Andrew, Jason: Here is the change to get_user_pages_fast(), that you requested during the review of "mm/gup: track dma-pinned pages: FOLL_PIN, FOLL_LONGTERM" [1]. This is a stand-alone patch that applies to today's 5.4.0-rc6 linux.git. If anyone could please provide any run-time testing (and of course, Reviewed-by's), that would be huge. I've compiled and run it, but bpftrace tells me (as I already knew) that my current anemic IB setup is not actually exercising this code path. Andrew: unless instructed otherwise, I plan to also re-post this as part of the next (v3) version of [1], and hopefully have the whole series go through your tree. That would avoid merge conflicts, and as I understand it, there is no particular urgency for this patch, so we might as well do it the easy way. John Hubbard (1): IB/umem: use get_user_pages_fast() to pin DMA pages drivers/infiniband/core/umem.c | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) -- 2.24.0 ^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH 1/1] IB/umem: use get_user_pages_fast() to pin DMA pages 2019-11-09 2:04 [PATCH 0/1] IB/umem: use get_user_pages_fast() to pin DMA pages John Hubbard @ 2019-11-09 2:04 ` John Hubbard 2019-11-11 3:21 ` Ira Weiny 2019-11-12 20:29 ` Jason Gunthorpe 0 siblings, 2 replies; 5+ messages in thread From: John Hubbard @ 2019-11-09 2:04 UTC (permalink / raw) To: Andrew Morton, Jason Gunthorpe Cc: Ira Weiny, linux-rdma, linux-mm, LKML, John Hubbard And get rid of the mmap_sem calls, as part of that. Note that get_user_pages_fast() will, if necessary, fall back to __gup_longterm_unlocked(), which takes the mmap_sem as needed. Cc: Jason Gunthorpe <jgg@ziepe.ca> Cc: Ira Weiny <ira.weiny@intel.com> Signed-off-by: John Hubbard <jhubbard@nvidia.com> --- drivers/infiniband/core/umem.c | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/drivers/infiniband/core/umem.c b/drivers/infiniband/core/umem.c index 24244a2f68cc..3d664a2539eb 100644 --- a/drivers/infiniband/core/umem.c +++ b/drivers/infiniband/core/umem.c @@ -271,16 +271,13 @@ struct ib_umem *ib_umem_get(struct ib_udata *udata, unsigned long addr, sg = umem->sg_head.sgl; while (npages) { - down_read(&mm->mmap_sem); - ret = get_user_pages(cur_base, - min_t(unsigned long, npages, - PAGE_SIZE / sizeof (struct page *)), - gup_flags | FOLL_LONGTERM, - page_list, NULL); - if (ret < 0) { - up_read(&mm->mmap_sem); + ret = get_user_pages_fast(cur_base, + min_t(unsigned long, npages, + PAGE_SIZE / + sizeof(struct page *)), + gup_flags | FOLL_LONGTERM, page_list); + if (ret < 0) goto umem_release; - } cur_base += ret * PAGE_SIZE; npages -= ret; @@ -288,8 +285,6 @@ struct ib_umem *ib_umem_get(struct ib_udata *udata, unsigned long addr, sg = ib_umem_add_sg_table(sg, page_list, ret, dma_get_max_seg_size(context->device->dma_device), &umem->sg_nents); - - up_read(&mm->mmap_sem); } sg_mark_end(sg); -- 2.24.0 ^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH 1/1] IB/umem: use get_user_pages_fast() to pin DMA pages 2019-11-09 2:04 ` [PATCH 1/1] " John Hubbard @ 2019-11-11 3:21 ` Ira Weiny 2019-11-11 21:44 ` John Hubbard 2019-11-12 20:29 ` Jason Gunthorpe 1 sibling, 1 reply; 5+ messages in thread From: Ira Weiny @ 2019-11-11 3:21 UTC (permalink / raw) To: John Hubbard; +Cc: Andrew Morton, Jason Gunthorpe, linux-rdma, linux-mm, LKML On Fri, Nov 08, 2019 at 06:04:34PM -0800, John Hubbard wrote: > And get rid of the mmap_sem calls, as part of that. Note > that get_user_pages_fast() will, if necessary, fall back to > __gup_longterm_unlocked(), which takes the mmap_sem as needed. > > Cc: Jason Gunthorpe <jgg@ziepe.ca> > Cc: Ira Weiny <ira.weiny@intel.com> Reviewed-by: Ira Weiny <ira.weiny@intel.com> > Signed-off-by: John Hubbard <jhubbard@nvidia.com> > --- > drivers/infiniband/core/umem.c | 17 ++++++----------- > 1 file changed, 6 insertions(+), 11 deletions(-) > > diff --git a/drivers/infiniband/core/umem.c b/drivers/infiniband/core/umem.c > index 24244a2f68cc..3d664a2539eb 100644 > --- a/drivers/infiniband/core/umem.c > +++ b/drivers/infiniband/core/umem.c > @@ -271,16 +271,13 @@ struct ib_umem *ib_umem_get(struct ib_udata *udata, unsigned long addr, > sg = umem->sg_head.sgl; > > while (npages) { > - down_read(&mm->mmap_sem); > - ret = get_user_pages(cur_base, > - min_t(unsigned long, npages, > - PAGE_SIZE / sizeof (struct page *)), > - gup_flags | FOLL_LONGTERM, > - page_list, NULL); > - if (ret < 0) { > - up_read(&mm->mmap_sem); > + ret = get_user_pages_fast(cur_base, > + min_t(unsigned long, npages, > + PAGE_SIZE / > + sizeof(struct page *)), > + gup_flags | FOLL_LONGTERM, page_list); > + if (ret < 0) > goto umem_release; > - } > > cur_base += ret * PAGE_SIZE; > npages -= ret; > @@ -288,8 +285,6 @@ struct ib_umem *ib_umem_get(struct ib_udata *udata, unsigned long addr, > sg = ib_umem_add_sg_table(sg, page_list, ret, > dma_get_max_seg_size(context->device->dma_device), > &umem->sg_nents); > - > - up_read(&mm->mmap_sem); > } > > sg_mark_end(sg); > -- > 2.24.0 > ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH 1/1] IB/umem: use get_user_pages_fast() to pin DMA pages 2019-11-11 3:21 ` Ira Weiny @ 2019-11-11 21:44 ` John Hubbard 0 siblings, 0 replies; 5+ messages in thread From: John Hubbard @ 2019-11-11 21:44 UTC (permalink / raw) To: Ira Weiny; +Cc: Andrew Morton, Jason Gunthorpe, linux-rdma, linux-mm, LKML On 11/10/19 7:21 PM, Ira Weiny wrote: > On Fri, Nov 08, 2019 at 06:04:34PM -0800, John Hubbard wrote: >> And get rid of the mmap_sem calls, as part of that. Note >> that get_user_pages_fast() will, if necessary, fall back to >> __gup_longterm_unlocked(), which takes the mmap_sem as needed. >> >> Cc: Jason Gunthorpe <jgg@ziepe.ca> >> Cc: Ira Weiny <ira.weiny@intel.com> > > Reviewed-by: Ira Weiny <ira.weiny@intel.com> > Thanks for the review, Ira! This will show up shortly, in the v3 series of "mm/gup: track dma-pinned pages: FOLL_PIN, FOLL_LONGTERM". thanks, -- John Hubbard NVIDIA >> Signed-off-by: John Hubbard <jhubbard@nvidia.com> >> --- >> drivers/infiniband/core/umem.c | 17 ++++++----------- >> 1 file changed, 6 insertions(+), 11 deletions(-) >> >> diff --git a/drivers/infiniband/core/umem.c b/drivers/infiniband/core/umem.c >> index 24244a2f68cc..3d664a2539eb 100644 >> --- a/drivers/infiniband/core/umem.c >> +++ b/drivers/infiniband/core/umem.c >> @@ -271,16 +271,13 @@ struct ib_umem *ib_umem_get(struct ib_udata *udata, unsigned long addr, >> sg = umem->sg_head.sgl; >> >> while (npages) { >> - down_read(&mm->mmap_sem); >> - ret = get_user_pages(cur_base, >> - min_t(unsigned long, npages, >> - PAGE_SIZE / sizeof (struct page *)), >> - gup_flags | FOLL_LONGTERM, >> - page_list, NULL); >> - if (ret < 0) { >> - up_read(&mm->mmap_sem); >> + ret = get_user_pages_fast(cur_base, >> + min_t(unsigned long, npages, >> + PAGE_SIZE / >> + sizeof(struct page *)), >> + gup_flags | FOLL_LONGTERM, page_list); >> + if (ret < 0) >> goto umem_release; >> - } >> >> cur_base += ret * PAGE_SIZE; >> npages -= ret; >> @@ -288,8 +285,6 @@ struct ib_umem *ib_umem_get(struct ib_udata *udata, unsigned long addr, >> sg = ib_umem_add_sg_table(sg, page_list, ret, >> dma_get_max_seg_size(context->device->dma_device), >> &umem->sg_nents); >> - >> - up_read(&mm->mmap_sem); >> } >> >> sg_mark_end(sg); >> -- >> 2.24.0 >> > ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH 1/1] IB/umem: use get_user_pages_fast() to pin DMA pages 2019-11-09 2:04 ` [PATCH 1/1] " John Hubbard 2019-11-11 3:21 ` Ira Weiny @ 2019-11-12 20:29 ` Jason Gunthorpe 1 sibling, 0 replies; 5+ messages in thread From: Jason Gunthorpe @ 2019-11-12 20:29 UTC (permalink / raw) To: John Hubbard; +Cc: Andrew Morton, Ira Weiny, linux-rdma, linux-mm, LKML On Fri, Nov 08, 2019 at 06:04:34PM -0800, John Hubbard wrote: > And get rid of the mmap_sem calls, as part of that. Note > that get_user_pages_fast() will, if necessary, fall back to > __gup_longterm_unlocked(), which takes the mmap_sem as needed. > > Cc: Jason Gunthorpe <jgg@ziepe.ca> > Cc: Ira Weiny <ira.weiny@intel.com> > Signed-off-by: John Hubbard <jhubbard@nvidia.com> > --- > drivers/infiniband/core/umem.c | 17 ++++++----------- > 1 file changed, 6 insertions(+), 11 deletions(-) Reviewed-by: Jason Gunthorpe <jgg@mellanox.com> This can go through Andrew's tree if he takes this larger series, otherwise I'll grab it Thanks, Jason ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2019-11-12 20:29 UTC | newest] Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2019-11-09 2:04 [PATCH 0/1] IB/umem: use get_user_pages_fast() to pin DMA pages John Hubbard 2019-11-09 2:04 ` [PATCH 1/1] " John Hubbard 2019-11-11 3:21 ` Ira Weiny 2019-11-11 21:44 ` John Hubbard 2019-11-12 20:29 ` Jason Gunthorpe
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).