On Mon, Nov 04, 2019 at 12:48:13PM -0800, John Hubbard wrote:
On 11/4/19 12:33 PM, Jason Gunthorpe wrote: ...
diff --git a/drivers/infiniband/core/umem.c b/drivers/infiniband/core/umem.c index 24244a2f68cc..c5a78d3e674b 100644 +++ b/drivers/infiniband/core/umem.c @@ -272,11 +272,10 @@ struct ib_umem *ib_umem_get(struct ib_udata *udata, unsigned long addr, while (npages) { down_read(&mm->mmap_sem);
ret = get_user_pages(cur_base,
ret = pin_longterm_pages(cur_base, min_t(unsigned long, npages, PAGE_SIZE / sizeof (struct page *)),
gup_flags | FOLL_LONGTERM,
page_list, NULL);
gup_flags, page_list, NULL);
FWIW, this one should be converted to fast as well, I think we finally got rid of all the blockers for that?
I'm not aware of any blockers on the gup.c end, anyway. The only broken thing we have there is "gup remote + FOLL_LONGTERM". But we can do "gup fast + LONGTERM".
I mean the use of the mmap_sem here is finally in a way where we can just delete the mmap_sem and use _fast
ie, AFAIK there is no need for the mmap_sem to be held during ib_umem_add_sg_table()
This should probably be a standalone patch however
Jason