userfaultfd.c (90794bf19dc19691a16b71bcd75c04094d9e392d) userfaultfd.c (05ce77249d5068b057082d24ec22d3824f4816ac)
1/*
2 * fs/userfaultfd.c
3 *
4 * Copyright (C) 2007 Davide Libenzi <davidel@xmailserver.org>
5 * Copyright (C) 2008-2009 Red Hat, Inc.
6 * Copyright (C) 2015 Red Hat, Inc.
7 *
8 * This work is licensed under the terms of the GNU GPL, version 2. See

--- 619 unchanged lines hidden (view full) ---

628 ewq.msg.event = UFFD_EVENT_REMAP;
629 ewq.msg.arg.remap.from = from;
630 ewq.msg.arg.remap.to = to;
631 ewq.msg.arg.remap.len = len;
632
633 userfaultfd_event_wait_completion(ctx, &ewq);
634}
635
1/*
2 * fs/userfaultfd.c
3 *
4 * Copyright (C) 2007 Davide Libenzi <davidel@xmailserver.org>
5 * Copyright (C) 2008-2009 Red Hat, Inc.
6 * Copyright (C) 2015 Red Hat, Inc.
7 *
8 * This work is licensed under the terms of the GNU GPL, version 2. See

--- 619 unchanged lines hidden (view full) ---

628 ewq.msg.event = UFFD_EVENT_REMAP;
629 ewq.msg.arg.remap.from = from;
630 ewq.msg.arg.remap.to = to;
631 ewq.msg.arg.remap.len = len;
632
633 userfaultfd_event_wait_completion(ctx, &ewq);
634}
635
636void madvise_userfault_dontneed(struct vm_area_struct *vma,
637 struct vm_area_struct **prev,
638 unsigned long start, unsigned long end)
639{
640 struct mm_struct *mm = vma->vm_mm;
641 struct userfaultfd_ctx *ctx;
642 struct userfaultfd_wait_queue ewq;
643
644 ctx = vma->vm_userfaultfd_ctx.ctx;
645 if (!ctx || !(ctx->features & UFFD_FEATURE_EVENT_MADVDONTNEED))
646 return;
647
648 userfaultfd_ctx_get(ctx);
649 up_read(&mm->mmap_sem);
650
651 *prev = NULL; /* We wait for ACK w/o the mmap semaphore */
652
653 msg_init(&ewq.msg);
654
655 ewq.msg.event = UFFD_EVENT_MADVDONTNEED;
656 ewq.msg.arg.madv_dn.start = start;
657 ewq.msg.arg.madv_dn.end = end;
658
659 userfaultfd_event_wait_completion(ctx, &ewq);
660
661 down_read(&mm->mmap_sem);
662}
663
636static int userfaultfd_release(struct inode *inode, struct file *file)
637{
638 struct userfaultfd_ctx *ctx = file->private_data;
639 struct mm_struct *mm = ctx->mm;
640 struct vm_area_struct *vma, *prev;
641 /* len == 0 means wake all */
642 struct userfaultfd_wake_range range = { .len = 0, };
643 unsigned long new_flags;

--- 1027 unchanged lines hidden ---
664static int userfaultfd_release(struct inode *inode, struct file *file)
665{
666 struct userfaultfd_ctx *ctx = file->private_data;
667 struct mm_struct *mm = ctx->mm;
668 struct vm_area_struct *vma, *prev;
669 /* len == 0 means wake all */
670 struct userfaultfd_wake_range range = { .len = 0, };
671 unsigned long new_flags;

--- 1027 unchanged lines hidden ---