userfaultfd: non-cooperative: optimize mremap_userfaultfd_complete()

Optimize the mremap_userfaultfd_complete() interface to pass only the
vm_userfaultfd_ctx pointer through the stack as a microoptimization.

Link: http://lkml.kernel.org/r/20161216144821.5183-13-aarcange@redhat.com
Signed-off-by: Andrea Arcangeli <aarcange@redhat.com>
Reported-by: Hillf Danton <hillf.zj@alibaba-inc.com>
Acked-by: Mike Rapoport <rppt@linux.vnet.ibm.com>
Cc: "Dr. David Alan Gilbert" <dgilbert@redhat.com>
Cc: Michael Rapoport <RAPOPORT@il.ibm.com>
Cc: Mike Kravetz <mike.kravetz@oracle.com>
Cc: Pavel Emelyanov <xemul@parallels.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
Andrea Arcangeli 2017-02-22 15:42:37 -08:00 committed by Linus Torvalds
parent 72f87654c6
commit 90794bf19d
3 changed files with 5 additions and 5 deletions

View File

@ -608,11 +608,11 @@ void mremap_userfaultfd_prep(struct vm_area_struct *vma,
} }
} }
void mremap_userfaultfd_complete(struct vm_userfaultfd_ctx vm_ctx, void mremap_userfaultfd_complete(struct vm_userfaultfd_ctx *vm_ctx,
unsigned long from, unsigned long to, unsigned long from, unsigned long to,
unsigned long len) unsigned long len)
{ {
struct userfaultfd_ctx *ctx = vm_ctx.ctx; struct userfaultfd_ctx *ctx = vm_ctx->ctx;
struct userfaultfd_wait_queue ewq; struct userfaultfd_wait_queue ewq;
if (!ctx) if (!ctx)

View File

@ -57,7 +57,7 @@ extern void dup_userfaultfd_complete(struct list_head *);
extern void mremap_userfaultfd_prep(struct vm_area_struct *, extern void mremap_userfaultfd_prep(struct vm_area_struct *,
struct vm_userfaultfd_ctx *); struct vm_userfaultfd_ctx *);
extern void mremap_userfaultfd_complete(struct vm_userfaultfd_ctx, extern void mremap_userfaultfd_complete(struct vm_userfaultfd_ctx *,
unsigned long from, unsigned long to, unsigned long from, unsigned long to,
unsigned long len); unsigned long len);
@ -100,7 +100,7 @@ static inline void mremap_userfaultfd_prep(struct vm_area_struct *vma,
{ {
} }
static inline void mremap_userfaultfd_complete(struct vm_userfaultfd_ctx ctx, static inline void mremap_userfaultfd_complete(struct vm_userfaultfd_ctx *ctx,
unsigned long from, unsigned long from,
unsigned long to, unsigned long to,
unsigned long len) unsigned long len)

View File

@ -608,6 +608,6 @@ out:
up_write(&current->mm->mmap_sem); up_write(&current->mm->mmap_sem);
if (locked && new_len > old_len) if (locked && new_len > old_len)
mm_populate(new_addr + old_len, new_len - old_len); mm_populate(new_addr + old_len, new_len - old_len);
mremap_userfaultfd_complete(uf, addr, new_addr, old_len); mremap_userfaultfd_complete(&uf, addr, new_addr, old_len);
return ret; return ret;
} }