Commit e451eb51 authored by Davidlohr Bueso's avatar Davidlohr Bueso Committed by Daniel Borkmann
Browse files

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: c0c77d8f ("xsk: add user memory registration support sockopt")
Signed-off-by: default avatarDavidlohr 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: default avatarBjörn Töpel <bjorn.topel@intel.com>
Signed-off-by: default avatarDaniel Borkmann <daniel@iogearbox.net>
parent 3defaf2f
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
@@ -259,10 +259,10 @@ 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,
	down_read(&current->mm->mmap_sem);
	npgs = get_user_pages_longterm(umem->address, umem->npgs,
				       gup_flags, &umem->pgs[0], NULL);
	up_write(&current->mm->mmap_sem);
	up_read(&current->mm->mmap_sem);

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