Skip to content

Commit e451eb5

Browse files
Davidlohr Buesoborkmann
authored andcommitted
xsk: share the mmap_sem for page pinning
Holding mmap_sem exclusively for a gup() is an overkill. Lets share the lock and replace the gup call for gup_longterm(), as it is better suited for the lifetime of the pinning. Fixes: c0c77d8 ("xsk: add user memory registration support sockopt") Signed-off-by: Davidlohr Bueso <dbueso@suse.de> Cc: David S. Miller <davem@davemloft.net> Cc: Bjorn Topel <bjorn.topel@intel.com> Cc: Magnus Karlsson <magnus.karlsson@intel.com> CC: netdev@vger.kernel.org Acked-by: Björn Töpel <bjorn.topel@intel.com> Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
1 parent 3defaf2 commit e451eb5

File tree

1 file changed

+4
-4
lines changed

1 file changed

+4
-4
lines changed

net/xdp/xdp_umem.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -259,10 +259,10 @@ static int xdp_umem_pin_pages(struct xdp_umem *umem)
259259
if (!umem->pgs)
260260
return -ENOMEM;
261261

262-
down_write(&current->mm->mmap_sem);
263-
npgs = get_user_pages(umem->address, umem->npgs,
264-
gup_flags, &umem->pgs[0], NULL);
265-
up_write(&current->mm->mmap_sem);
262+
down_read(&current->mm->mmap_sem);
263+
npgs = get_user_pages_longterm(umem->address, umem->npgs,
264+
gup_flags, &umem->pgs[0], NULL);
265+
up_read(&current->mm->mmap_sem);
266266

267267
if (npgs != umem->npgs) {
268268
if (npgs >= 0) {

0 commit comments

Comments
 (0)