Re: [PATCH 1/2] xsk: do not use mmap_sem

From: Dan Williams
Date: Mon Feb 11 2019 - 11:37:56 EST


[ add Ira ]

On Mon, Feb 11, 2019 at 7:33 AM Daniel Borkmann <daniel@xxxxxxxxxxxxx> wrote:
>
> [ +Dan ]
>
> On 02/07/2019 08:43 AM, BjÃrn TÃpel wrote:
> > Den tors 7 feb. 2019 kl 06:38 skrev Davidlohr Bueso <dave@xxxxxxxxxxxx>:
> >>
> >> Holding mmap_sem exclusively for a gup() is an overkill.
> >> Lets replace the call for gup_fast() and let the mm take
> >> it if necessary.
> >>
> >> Cc: David S. Miller <davem@xxxxxxxxxxxxx>
> >> Cc: Bjorn Topel <bjorn.topel@xxxxxxxxx>
> >> Cc: Magnus Karlsson <magnus.karlsson@xxxxxxxxx>
> >> CC: netdev@xxxxxxxxxxxxxxx
> >> Signed-off-by: Davidlohr Bueso <dbueso@xxxxxxx>
> >> ---
> >> net/xdp/xdp_umem.c | 6 ++----
> >> 1 file changed, 2 insertions(+), 4 deletions(-)
> >>
> >> diff --git a/net/xdp/xdp_umem.c b/net/xdp/xdp_umem.c
> >> index 5ab236c5c9a5..25e1e76654a8 100644
> >> --- a/net/xdp/xdp_umem.c
> >> +++ b/net/xdp/xdp_umem.c
> >> @@ -265,10 +265,8 @@ static int xdp_umem_pin_pages(struct xdp_umem *umem)
> >> if (!umem->pgs)
> >> return -ENOMEM;
> >>
> >> - down_write(&current->mm->mmap_sem);
> >> - npgs = get_user_pages(umem->address, umem->npgs,
> >> - gup_flags, &umem->pgs[0], NULL);
> >> - up_write(&current->mm->mmap_sem);
> >> + npgs = get_user_pages_fast(umem->address, umem->npgs,
> >> + gup_flags, &umem->pgs[0]);
> >>
> >
> > Thanks for the patch!
> >
> > The lifetime of the pinning is similar to RDMA umem mapping, so isn't
> > gup_longterm preferred?
>
> Seems reasonable from reading what gup_longterm seems to do. Davidlohr
> or Dan, any thoughts on the above?

Yes, any gup where the lifetime of the corresponding put_page() is
under direct control of userspace should be using the _longterm flavor
to coordinate be careful in the presence of dax. In the dax case there
is no page cache indirection to coordinate truncate vs page pins. Ira
is looking to add a "fast + longterm" flavor for cases like this.