Re: [PATCH v10 2/6] userfaultfd: update documentation to describe UFFD_FEATURE_WP_ASYNC

From: Muhammad Usama Anjum
Date: Thu Feb 09 2023 - 10:48:26 EST


On 2/9/23 2:31 AM, Peter Xu wrote:
> On Thu, Feb 02, 2023 at 04:29:11PM +0500, Muhammad Usama Anjum wrote:
>> Explain the difference created by UFFD_FEATURE_WP_ASYNC to the write
>> protection (UFFDIO_WRITEPROTECT_MODE_WP) mode.
>>
>> Signed-off-by: Muhammad Usama Anjum <usama.anjum@xxxxxxxxxxxxx>
>> ---
>> Documentation/admin-guide/mm/userfaultfd.rst | 7 +++++++
>> 1 file changed, 7 insertions(+)
>>
>> diff --git a/Documentation/admin-guide/mm/userfaultfd.rst b/Documentation/admin-guide/mm/userfaultfd.rst
>> index 83f31919ebb3..4747e7bd5b26 100644
>> --- a/Documentation/admin-guide/mm/userfaultfd.rst
>> +++ b/Documentation/admin-guide/mm/userfaultfd.rst
>> @@ -221,6 +221,13 @@ former will have ``UFFD_PAGEFAULT_FLAG_WP`` set, the latter
>> you still need to supply a page when ``UFFDIO_REGISTER_MODE_MISSING`` was
>> used.
>>
>> +If ``UFFD_FEATURE_WP_ASYNC`` is set while calling ``UFFDIO_API`` ioctl, the
>> +behaviour of ``UFFDIO_WRITEPROTECT_MODE_WP`` changes such that faults for
>
> UFFDIO_WRITEPROTECT_MODE_WP is only a flag in UFFDIO_WRITEPROTECT, while
> it's forbidden only when not specified.
>
>> +anon and shmem are resolved automatically by the kernel instead of sending
>> +the message to the userfaultfd. The hugetlb isn't supported. The ``pagemap``
>> +file can be read to find which pages have ``PM_UFFD_WP`` flag set which
>> +means they are write-protected.
>
> Here's my version. Please feel free to do modifications on top.
>
> If the userfaultfd context (that has ``UFFDIO_REGISTER_MODE_WP``
> registered against) has ``UFFD_FEATURE_WP_ASYNC`` feature enabled, it
> will work in async write protection mode. It can be seen as a more
> accurate version of soft-dirty tracking, meanwhile the results will not
> be easily affected by other operations like vma merging.
>
> Comparing to the generic mode, the async mode will not generate any
> userfaultfd message when the protected memory range is written. Instead,
> the kernel will automatically resolve the page fault immediately by
> dropping the uffd-wp bit in the pgtables. The user app can collect the
> "written/dirty" status by looking up the uffd-wp bit for the pages being
> interested in /proc/pagemap.
>
> The page will be under track of uffd-wp async mode until the page is
> explicitly write-protected by ``UFFDIO_WRITEPROTECT`` ioctl with the mode
> flag ``UFFDIO_WRITEPROTECT_MODE_WP`` set. Trying to resolve a page fault
> that was tracked by async mode userfaultfd-wp is invalid.
>
> Currently ``UFFD_FEATURE_WP_ASYNC`` only support anonymous and shmem.
> Hugetlb is not yet supported.
>
It'll get replaced the documentation. I'll add a suggested by tag as well.
Thanks.

--
BR,
Muhammad Usama Anjum