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