Re: [PATCH v8 4/6] userfaultfd: add UFFDIO_CONTINUE ioctl
From: Peter Xu
Date: Thu Feb 25 2021 - 16:06:06 EST
On Wed, Feb 24, 2021 at 04:26:56PM -0800, Axel Rasmussen wrote:
>
This ioctl is how userspace ought to resolve "minor" userfaults. The
>
idea is, userspace is notified that a minor fault has occurred. It might
>
change the contents of the page using its second non-UFFD mapping, or
>
not. Then, it calls UFFDIO_CONTINUE to tell the kernel "I have ensured
>
the page contents are correct, carry on setting up the mapping".
>
>
Note that it doesn't make much sense to use UFFDIO_{COPY,ZEROPAGE} for
>
MINOR registered VMAs. ZEROPAGE maps the VMA to the zero page; but in
>
the minor fault case, we already have some pre-existing underlying page.
>
Likewise, UFFDIO_COPY isn't useful if we have a second non-UFFD mapping.
>
We'd just use memcpy() or similar instead.
>
>
It turns out hugetlb_mcopy_atomic_pte() already does very close to what
>
we want, if an existing page is provided via `struct page **pagep`. We
>
already special-case the behavior a bit for the UFFDIO_ZEROPAGE case, so
>
just extend that design: add an enum for the three modes of operation,
>
and make the small adjustments needed for the MCOPY_ATOMIC_CONTINUE
>
case. (Basically, look up the existing page, and avoid adding the
>
existing page to the page cache or calling set_page_huge_active() on
>
it.)
>
>
Signed-off-by: Axel Rasmussen <axelrasmussen@xxxxxxxxxx>
Reviewed-by: Peter Xu <peterx@xxxxxxxxxx>
--
Peter Xu