Mike Rapoport
da5502c0a3
userfaultfd: non-cooperative: selftest: add test for FORK, MADVDONTNEED and REMAP events
...
Add test for userfaultfd events used in non-cooperative scenario when
the process that monitors the userfaultfd and handles user faults is not
the same process that causes the page faults.
Link: http://lkml.kernel.org/r/20161216144821.5183-41-aarcange@redhat.com
Signed-off-by: Mike Rapoport <rppt@linux.vnet.ibm.com >
Signed-off-by: Andrea Arcangeli <aarcange@redhat.com >
Cc: "Dr. David Alan Gilbert" <dgilbert@redhat.com >
Cc: Hillf Danton <hillf.zj@alibaba-inc.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 >
2017-02-22 16:41:29 -08:00
Mike Rapoport
aa0d272174
userfaultfd: non-cooperative: selftest: add ufd parameter to copy_page
...
With future addition of event tests, copy_page will be called with
different userfault file descriptors
Link: http://lkml.kernel.org/r/20161216144821.5183-40-aarcange@redhat.com
Signed-off-by: Mike Rapoport <rppt@linux.vnet.ibm.com >
Signed-off-by: Andrea Arcangeli <aarcange@redhat.com >
Cc: "Dr. David Alan Gilbert" <dgilbert@redhat.com >
Cc: Hillf Danton <hillf.zj@alibaba-inc.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 >
2017-02-22 16:41:29 -08:00
Mike Rapoport
6228b8f2d1
userfaultfd: non-cooperative: selftest: introduce userfaultfd_open
...
userfaultfd_open will be needed by the non cooperative selftest.
Link: http://lkml.kernel.org/r/20161216144821.5183-39-aarcange@redhat.com
Signed-off-by: Mike Rapoport <rppt@linux.vnet.ibm.com >
Signed-off-by: Andrea Arcangeli <aarcange@redhat.com >
Cc: "Dr. David Alan Gilbert" <dgilbert@redhat.com >
Cc: Hillf Danton <hillf.zj@alibaba-inc.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 >
2017-02-22 16:41:29 -08:00
Andrea Arcangeli
47dd924508
userfaultfd: hugetlbfs: UFFD_FEATURE_MISSING_SHMEM
...
Userland developers asked to be notified immediately by the UFFDIO_API
ioctl if shmem missing mode is supported by userfaultfd in the running
kernel. This avoids the need to run UFFDIO_REGISTER on a shmem virtual
memory range to find out.
Link: http://lkml.kernel.org/r/20161216144821.5183-38-aarcange@redhat.com
Signed-off-by: Andrea Arcangeli <aarcange@redhat.com >
Cc: "Dr. David Alan Gilbert" <dgilbert@redhat.com >
Cc: Hillf Danton <hillf.zj@alibaba-inc.com >
Cc: Michael Rapoport <RAPOPORT@il.ibm.com >
Cc: Mike Kravetz <mike.kravetz@oracle.com >
Cc: Mike Rapoport <rppt@linux.vnet.ibm.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 >
2017-02-22 16:41:29 -08:00
Andrea Arcangeli
cb658a453b
userfaultfd: shmem: avoid leaking blocks and used blocks in UFFDIO_COPY
...
If the atomic copy_user fails because of a real dangling userland
pointer, we won't go back into the shmem method, so when the method
returns it must not leave anything charged up, except the page itself.
Link: http://lkml.kernel.org/r/20161216144821.5183-37-aarcange@redhat.com
Signed-off-by: Andrea Arcangeli <aarcange@redhat.com >
Cc: "Dr. David Alan Gilbert" <dgilbert@redhat.com >
Cc: Hillf Danton <hillf.zj@alibaba-inc.com >
Cc: Michael Rapoport <RAPOPORT@il.ibm.com >
Cc: Mike Kravetz <mike.kravetz@oracle.com >
Cc: Mike Rapoport <rppt@linux.vnet.ibm.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 >
2017-02-22 16:41:29 -08:00
Andrea Arcangeli
a425d3584e
userfaultfd: shmem: avoid a lockup resulting from corrupted page->flags
...
Use the non atomic version of __SetPageUptodate while the page is still
private and not visible to lookup operations. Using the non atomic
version after the page is already visible to lookups is unsafe as there
would be concurrent lock_page operation modifying the page->flags while
it runs.
This solves a lockup in find_lock_entry with the userfaultfd_shmem
selftest.
userfaultfd_shm D14296 691 1 0x00000004
Call Trace:
schedule+0x3d/0x90
schedule_timeout+0x228/0x420
io_schedule_timeout+0xa4/0x110
__lock_page+0x12d/0x170
find_lock_entry+0xa4/0x190
shmem_getpage_gfp+0xb9/0xc30
shmem_fault+0x70/0x1c0
__do_fault+0x21/0x150
handle_mm_fault+0xec9/0x1490
__do_page_fault+0x20d/0x520
trace_do_page_fault+0x61/0x270
do_async_page_fault+0x19/0x80
async_page_fault+0x25/0x30
Link: http://lkml.kernel.org/r/20170116180408.12184-2-aarcange@redhat.com
Signed-off-by: Andrea Arcangeli <aarcange@redhat.com >
Reported-by: Mike Rapoport <rppt@linux.vnet.ibm.com >
Acked-by: Hillf Danton <hillf.zj@alibaba-inc.com >
Signed-off-by: Andrew Morton <akpm@linux-foundation.org >
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org >
2017-02-22 16:41:29 -08:00
Andrea Arcangeli
9cc90c664a
userfaultfd: shmem: lock the page before adding it to pagecache
...
A VM_BUG_ON triggered on the shmem selftest.
Link: http://lkml.kernel.org/r/20161216144821.5183-36-aarcange@redhat.com
Signed-off-by: Andrea Arcangeli <aarcange@redhat.com >
Cc: "Dr. David Alan Gilbert" <dgilbert@redhat.com >
Cc: Hillf Danton <hillf.zj@alibaba-inc.com >
Cc: Michael Rapoport <RAPOPORT@il.ibm.com >
Cc: Mike Kravetz <mike.kravetz@oracle.com >
Cc: Mike Rapoport <rppt@linux.vnet.ibm.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 >
2017-02-22 16:41:29 -08:00
Mike Rapoport
419624daf0
userfaultfd: shmem: add userfaultfd_shmem test
...
The test verifies that anonymous shared mapping can be used with userfault
using the existing testing method. The shared memory area is allocated
using mmap(..., MAP_SHARED | MAP_ANONYMOUS, ...) and released using
madvise(MADV_REMOVE)
Link: http://lkml.kernel.org/r/20161216144821.5183-35-aarcange@redhat.com
Signed-off-by: Mike Rapoport <rppt@linux.vnet.ibm.com >
Signed-off-by: Andrea Arcangeli <aarcange@redhat.com >
Cc: "Dr. David Alan Gilbert" <dgilbert@redhat.com >
Cc: Hillf Danton <hillf.zj@alibaba-inc.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 >
2017-02-22 16:41:29 -08:00
Mike Kravetz
1c9e8def43
userfaultfd: hugetlbfs: add UFFDIO_COPY support for shared mappings
...
When userfaultfd hugetlbfs support was originally added, it followed the
pattern of anon mappings and did not support any vmas marked VM_SHARED.
As such, support was only added for private mappings.
Remove this limitation and support shared mappings. The primary
functional change required is adding pages to the page cache. More subtle
changes are required for huge page reservation handling in error paths. A
lengthy comment in the code describes the reservation handling.
[mike.kravetz@oracle.com: update]
Link: http://lkml.kernel.org/r/c9c8cafe-baa7-05b4-34ea-1dfa5523a85f@oracle.com
Link: http://lkml.kernel.org/r/1487195210-12839-1-git-send-email-mike.kravetz@oracle.com
Signed-off-by: Mike Kravetz <mike.kravetz@oracle.com >
Reviewed-by: Andrea Arcangeli <aarcange@redhat.com >
Cc: Andrew Morton <akpm@linux-foundation.org >
Cc: Mike Rapoport <rppt@linux.vnet.ibm.com >
Cc: "Dr. David Alan Gilbert" <dgilbert@redhat.com >
Cc: Hillf Danton <hillf.zj@alibaba-inc.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 >
2017-02-22 16:41:28 -08:00
Mike Rapoport
cac673292b
userfaultfd: shmem: allow registration of shared memory ranges
...
Expand the userfaultfd_register/unregister routines to allow shared
memory VMAs.
Currently, there is no UFFDIO_ZEROPAGE and write-protection support for
shared memory VMAs, which is reflected in ioctl methods supported by
uffdio_register.
Link: http://lkml.kernel.org/r/20161216144821.5183-34-aarcange@redhat.com
Signed-off-by: Mike Rapoport <rppt@linux.vnet.ibm.com >
Signed-off-by: Andrea Arcangeli <aarcange@redhat.com >
Cc: "Dr. David Alan Gilbert" <dgilbert@redhat.com >
Cc: Hillf Danton <hillf.zj@alibaba-inc.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 >
2017-02-22 16:41:28 -08:00
Mike Rapoport
cfda05267f
userfaultfd: shmem: add userfaultfd hook for shared memory faults
...
When processing a page fault in shared memory area for not present page,
check the VMA determine if faults are to be handled by userfaultfd. If
so, delegate the page fault to handle_userfault.
Link: http://lkml.kernel.org/r/20161216144821.5183-33-aarcange@redhat.com
Signed-off-by: Mike Rapoport <rppt@linux.vnet.ibm.com >
Signed-off-by: Andrea Arcangeli <aarcange@redhat.com >
Cc: "Dr. David Alan Gilbert" <dgilbert@redhat.com >
Cc: Hillf Danton <hillf.zj@alibaba-inc.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 >
2017-02-22 16:41:28 -08:00
Mike Rapoport
26071cedc5
userfaultfd: shmem: use shmem_mcopy_atomic_pte for shared memory
...
The shmem_mcopy_atomic_pte implements low lever part of UFFDIO_COPY
operation for shared memory VMAs. It's based on mcopy_atomic_pte with
adjustments necessary for shared memory pages.
Link: http://lkml.kernel.org/r/20161216144821.5183-32-aarcange@redhat.com
Signed-off-by: Mike Rapoport <rppt@linux.vnet.ibm.com >
Signed-off-by: Andrea Arcangeli <aarcange@redhat.com >
Cc: "Dr. David Alan Gilbert" <dgilbert@redhat.com >
Cc: Hillf Danton <hillf.zj@alibaba-inc.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 >
2017-02-22 16:41:28 -08:00
Andrea Arcangeli
95cc09d66f
userfaultfd: shmem: add tlbflush.h header for microblaze
...
It resolves this build error:
All errors (new ones prefixed by >>):
mm/shmem.c: In function 'shmem_mcopy_atomic_pte':
>> mm/shmem.c:2228:2: error: implicit declaration of function 'update_mmu_cache' [-Werror=implicit-function-declaration]
update_mmu_cache(dst_vma, dst_addr, dst_pte);
microblaze may have to be also updated to define it in asm/pgtable.h
like the other archs, then this header inclusion can be removed.
Link: http://lkml.kernel.org/r/20161216144821.5183-31-aarcange@redhat.com
Signed-off-by: Andrea Arcangeli <aarcange@redhat.com >
Cc: "Dr. David Alan Gilbert" <dgilbert@redhat.com >
Cc: Hillf Danton <hillf.zj@alibaba-inc.com >
Cc: Michael Rapoport <RAPOPORT@il.ibm.com >
Cc: Mike Kravetz <mike.kravetz@oracle.com >
Cc: Mike Rapoport <rppt@linux.vnet.ibm.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 >
2017-02-22 16:41:28 -08:00
Mike Rapoport
b0506e488d
userfaultfd: shmem: introduce vma_is_shmem
...
Currently userfault relies on vma_is_anonymous and vma_is_hugetlb to
ensure compatibility of a VMA with userfault. Introduction of
vma_is_shmem allows detection if tmpfs backed VMAs, so that they may be
used with userfaultfd. Current implementation presumes usage of
vma_is_shmem only by slow path routines in userfaultfd, therefore the
vma_is_shmem is not made inline to leave the few remaining free bits in
vm_flags.
Link: http://lkml.kernel.org/r/20161216144821.5183-30-aarcange@redhat.com
Signed-off-by: Mike Rapoport <rppt@linux.vnet.ibm.com >
Signed-off-by: Andrea Arcangeli <aarcange@redhat.com >
Cc: "Dr. David Alan Gilbert" <dgilbert@redhat.com >
Cc: Hillf Danton <hillf.zj@alibaba-inc.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 >
2017-02-22 16:41:28 -08:00
Mike Rapoport
4c27fe4c4c
userfaultfd: shmem: add shmem_mcopy_atomic_pte for userfaultfd support
...
shmem_mcopy_atomic_pte is the low level routine that implements the
userfaultfd UFFDIO_COPY command. It is based on the existing
mcopy_atomic_pte routine with modifications for shared memory pages.
Link: http://lkml.kernel.org/r/20161216144821.5183-29-aarcange@redhat.com
Signed-off-by: Mike Rapoport <rppt@linux.vnet.ibm.com >
Signed-off-by: Andrea Arcangeli <aarcange@redhat.com >
Cc: "Dr. David Alan Gilbert" <dgilbert@redhat.com >
Cc: Hillf Danton <hillf.zj@alibaba-inc.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 >
2017-02-22 16:41:28 -08:00
Mike Rapoport
ba6907db6d
userfaultfd: introduce vma_can_userfault
...
Check whether a VMA can be used with userfault in more compact way
Link: http://lkml.kernel.org/r/20161216144821.5183-28-aarcange@redhat.com
Signed-off-by: Mike Rapoport <rppt@linux.vnet.ibm.com >
Signed-off-by: Andrea Arcangeli <aarcange@redhat.com >
Acked-by: Hillf Danton <hillf.zj@alibaba-inc.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 >
2017-02-22 16:41:28 -08:00
Andrea Arcangeli
163e11bc4f
userfaultfd: hugetlbfs: UFFD_FEATURE_MISSING_HUGETLBFS
...
Userland developers asked to be notified immediately by the UFFDIO_API
ioctl if hugetlbfs missing mode is supported by userfaultfd in the
running kernel. This avoids the need to run UFFDIO_REGISTER on a
hugetlbfs virtual memory range to find out.
Link: http://lkml.kernel.org/r/20161216144821.5183-27-aarcange@redhat.com
Signed-off-by: Andrea Arcangeli <aarcange@redhat.com >
Cc: "Dr. David Alan Gilbert" <dgilbert@redhat.com >
Cc: Hillf Danton <hillf.zj@alibaba-inc.com >
Cc: Michael Rapoport <RAPOPORT@il.ibm.com >
Cc: Mike Kravetz <mike.kravetz@oracle.com >
Cc: Mike Rapoport <rppt@linux.vnet.ibm.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 >
2017-02-22 16:41:28 -08:00
Mike Kravetz
21205bf8f7
userfaultfd: hugetlbfs: reserve count on error in __mcopy_atomic_hugetlb
...
If __mcopy_atomic_hugetlb exits with an error, put_page will be called
if a huge page was allocated and needs to be freed. If a reservation
was associated with the huge page, the PagePrivate flag will be set.
Clear PagePrivate before calling put_page/free_huge_page so that the
global reservation count is not incremented.
Link: http://lkml.kernel.org/r/20161216144821.5183-26-aarcange@redhat.com
Signed-off-by: Mike Kravetz <mike.kravetz@oracle.com >
Signed-off-by: Andrea Arcangeli <aarcange@redhat.com >
Cc: "Dr. David Alan Gilbert" <dgilbert@redhat.com >
Cc: Hillf Danton <hillf.zj@alibaba-inc.com >
Cc: Michael Rapoport <RAPOPORT@il.ibm.com >
Cc: Mike Rapoport <rppt@linux.vnet.ibm.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 >
2017-02-22 16:41:28 -08:00
Andrea Arcangeli
87ffc118b5
userfaultfd: hugetlbfs: gup: support VM_FAULT_RETRY
...
Add support for VM_FAULT_RETRY to follow_hugetlb_page() so that
get_user_pages_unlocked/locked and "nonblocking/FOLL_NOWAIT" features
will work on hugetlbfs.
This is required for fully functional userfaultfd non-present support on
hugetlbfs.
Link: http://lkml.kernel.org/r/20161216144821.5183-25-aarcange@redhat.com
Signed-off-by: Andrea Arcangeli <aarcange@redhat.com >
Reviewed-by: Mike Kravetz <mike.kravetz@oracle.com >
Cc: "Dr. David Alan Gilbert" <dgilbert@redhat.com >
Cc: Hillf Danton <hillf.zj@alibaba-inc.com >
Cc: Michael Rapoport <RAPOPORT@il.ibm.com >
Cc: Mike Rapoport <rppt@linux.vnet.ibm.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 >
2017-02-22 16:41:28 -08:00
Mike Kravetz
369cd2121b
userfaultfd: hugetlbfs: userfaultfd_huge_must_wait for hugepmd ranges
...
Add routine userfaultfd_huge_must_wait which has the same functionality
as the existing userfaultfd_must_wait routine. Only difference is that
new routine must handle page table structure for hugepmd vmas.
Link: http://lkml.kernel.org/r/20161216144821.5183-24-aarcange@redhat.com
Signed-off-by: Mike Kravetz <mike.kravetz@oracle.com >
Signed-off-by: Andrea Arcangeli <aarcange@redhat.com >
Cc: "Dr. David Alan Gilbert" <dgilbert@redhat.com >
Cc: Hillf Danton <hillf.zj@alibaba-inc.com >
Cc: Michael Rapoport <RAPOPORT@il.ibm.com >
Cc: Mike Rapoport <rppt@linux.vnet.ibm.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 >
2017-02-22 16:41:28 -08:00
Mike Kravetz
9903bd7b73
userfaultfd: hugetlbfs: add userfaultfd_hugetlb test
...
Test userfaultfd hugetlb functionality by using the existing testing
method (in userfaultfd.c). Instead of an anonymous memeory, a hugetlbfs
file is mmap'ed private. In this way fallocate hole punch can be used
to release pages. This is because madvise(MADV_DONTNEED) is not
supported for huge pages.
Use the same file, but create wrappers for allocating ranges and
releasing pages. Compile userfaultfd.c with HUGETLB_TEST defined to
produce an executable to test userfaultfd hugetlb functionality.
Link: http://lkml.kernel.org/r/20161216144821.5183-23-aarcange@redhat.com
Signed-off-by: Mike Kravetz <mike.kravetz@oracle.com >
Signed-off-by: Andrea Arcangeli <aarcange@redhat.com >
Cc: "Dr. David Alan Gilbert" <dgilbert@redhat.com >
Cc: Hillf Danton <hillf.zj@alibaba-inc.com >
Cc: Michael Rapoport <RAPOPORT@il.ibm.com >
Cc: Mike Rapoport <rppt@linux.vnet.ibm.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 >
2017-02-22 16:41:28 -08:00
Mike Kravetz
cab350afcb
userfaultfd: hugetlbfs: allow registration of ranges containing huge pages
...
Expand the userfaultfd_register/unregister routines to allow VM_HUGETLB
vmas. huge page alignment checking is performed after a VM_HUGETLB vma
is encountered.
Also, since there is no UFFDIO_ZEROPAGE support for huge pages do not
return that as a valid ioctl method for huge page ranges.
Link: http://lkml.kernel.org/r/20161216144821.5183-22-aarcange@redhat.com
Signed-off-by: Mike Kravetz <mike.kravetz@oracle.com >
Signed-off-by: Andrea Arcangeli <aarcange@redhat.com >
Cc: "Dr. David Alan Gilbert" <dgilbert@redhat.com >
Cc: Hillf Danton <hillf.zj@alibaba-inc.com >
Cc: Michael Rapoport <RAPOPORT@il.ibm.com >
Cc: Mike Rapoport <rppt@linux.vnet.ibm.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 >
2017-02-22 16:41:28 -08:00
Mike Kravetz
1a1aad8a9b
userfaultfd: hugetlbfs: add userfaultfd hugetlb hook
...
When processing a hugetlb fault for no page present, check the vma to
determine if faults are to be handled via userfaultfd. If so, drop the
hugetlb_fault_mutex and call handle_userfault().
Link: http://lkml.kernel.org/r/20161216144821.5183-21-aarcange@redhat.com
Signed-off-by: Mike Kravetz <mike.kravetz@oracle.com >
Signed-off-by: Andrea Arcangeli <aarcange@redhat.com >
Acked-by: Hillf Danton <hillf.zj@alibaba-inc.com >
Cc: "Dr. David Alan Gilbert" <dgilbert@redhat.com >
Cc: Michael Rapoport <RAPOPORT@il.ibm.com >
Cc: Mike Rapoport <rppt@linux.vnet.ibm.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 >
2017-02-22 16:41:28 -08:00
Mike Kravetz
810a56b943
userfaultfd: hugetlbfs: fix __mcopy_atomic_hugetlb retry/error processing
...
The new routine copy_huge_page_from_user() uses kmap_atomic() to map
PAGE_SIZE pages. However, this prevents page faults in the subsequent
call to copy_from_user(). This is OK in the case where the routine is
copied with mmap_sema held. However, in another case we want to allow
page faults. So, add a new argument allow_pagefault to indicate if the
routine should allow page faults.
[dan.carpenter@oracle.com: unmap the correct pointer]
Link: http://lkml.kernel.org/r/20170113082608.GA3548@mwanda
[akpm@linux-foundation.org: kunmap() takes a page*, per Hugh]
Link: http://lkml.kernel.org/r/20161216144821.5183-20-aarcange@redhat.com
Signed-off-by: Mike Kravetz <mike.kravetz@oracle.com >
Signed-off-by: Andrea Arcangeli <aarcange@redhat.com >
Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com >
Cc: "Dr. David Alan Gilbert" <dgilbert@redhat.com >
Cc: Hillf Danton <hillf.zj@alibaba-inc.com >
Cc: Michael Rapoport <RAPOPORT@il.ibm.com >
Cc: Mike Rapoport <rppt@linux.vnet.ibm.com >
Cc: Pavel Emelyanov <xemul@parallels.com >
Cc: Hugh Dickins <hughd@google.com >
Cc: Hugh Dickins <hughd@google.com >
Signed-off-by: Andrew Morton <akpm@linux-foundation.org >
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org >
2017-02-22 16:41:28 -08:00
Mike Kravetz
60d4d2d2b4
userfaultfd: hugetlbfs: add __mcopy_atomic_hugetlb for huge page UFFDIO_COPY
...
__mcopy_atomic_hugetlb performs the UFFDIO_COPY operation for huge
pages. It is based on the existing __mcopy_atomic routine for normal
pages. Unlike normal pages, there is no huge page support for the
UFFDIO_ZEROPAGE operation.
Link: http://lkml.kernel.org/r/20161216144821.5183-19-aarcange@redhat.com
Signed-off-by: Mike Kravetz <mike.kravetz@oracle.com >
Signed-off-by: Andrea Arcangeli <aarcange@redhat.com >
Cc: "Dr. David Alan Gilbert" <dgilbert@redhat.com >
Cc: Hillf Danton <hillf.zj@alibaba-inc.com >
Cc: Michael Rapoport <RAPOPORT@il.ibm.com >
Cc: Mike Rapoport <rppt@linux.vnet.ibm.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 >
2017-02-22 16:41:28 -08:00