Document the UFFDIO_RWPROTECT ioctl (since Linux 7.2). It installs or removes read-write protection on a range that was registered with UFFDIO_REGISTER_MODE_RWP, and is also how a handler resolves an UFFD_PAGEFAULT_FLAG_RWP notification. Cover the two mode bits (UFFDIO_RWPROTECT_MODE_RWP and UFFDIO_RWPROTECT_MODE_DONTWAKE, mutually exclusive), the populated- pages-only semantics, the anon vs file-backed reclaim behaviour, the explicit-drop list (MADV_DONTNEED, hole-punch, truncation), and the EINVAL/EAGAIN/ENOENT/EFAULT errors returned by the kernel. Signed-off-by: Kiryl Shutsemau --- man/man2const/UFFDIO_RWPROTECT.2const | 117 ++++++++++++++++++++++++++ 1 file changed, 117 insertions(+) create mode 100644 man/man2const/UFFDIO_RWPROTECT.2const diff --git a/man/man2const/UFFDIO_RWPROTECT.2const b/man/man2const/UFFDIO_RWPROTECT.2const new file mode 100644 index 000000000000..4ebe0a8648f3 --- /dev/null +++ b/man/man2const/UFFDIO_RWPROTECT.2const @@ -0,0 +1,117 @@ +.\" Copyright, the authors of the Linux man-pages project +.\" +.\" SPDX-License-Identifier: Linux-man-pages-copyleft +.\" +.TH UFFDIO_RWPROTECT 2const (date) "Linux man-pages (unreleased)" +.SH NAME +UFFDIO_RWPROTECT +\- +read-write-protect or un-protect a userfaultfd-registered memory range +.SH LIBRARY +Standard C library +.RI ( libc ,\~ \-lc ) +.SH SYNOPSIS +.nf +.BR "#include " " /* Definition of " UFFD* " constants */" +.B #include +.P +.BI "int ioctl(int " fd ", UFFDIO_RWPROTECT, struct uffdio_rwprotect *" argp ); +.P +.B #include +.P +.fi +.EX +.B struct uffdio_rwprotect { +.BR " struct uffdio_range range;" " /* Range to change RWP on */" +.BR " __u64 mode;" " /* Mode flags */" +.B }; +.EE +.SH DESCRIPTION +Read-write-protect or un-protect a userfaultfd-registered memory range +registered with mode +.BR UFFDIO_REGISTER_MODE_RWP . +.P +The following mode bits are supported: +.TP +.B UFFDIO_RWPROTECT_MODE_RWP +When this mode bit is set, +the ioctl installs read-write protection on every present page in the +range specified by +.IR range . +Otherwise the ioctl removes read-write protection from the range, which +is also how a faulted handler resolves an +.B UFFD_PAGEFAULT_FLAG_RWP +notification. +.TP +.B UFFDIO_RWPROTECT_MODE_DONTWAKE +When this mode bit is set, +do not wake up any thread that waits for page-fault resolution after +the operation. +This can be specified only if +.B UFFDIO_RWPROTECT_MODE_RWP +is not specified. +.P +Read-write protection only affects pages that are currently populated +in the range; unmapped addresses are left untouched. +For anonymous mappings, protection is preserved across page reclaim +(the marker rides on the swap entry) and migration. +For shmem and file-backed mappings, protection is dropped when the +backing page is reclaimed. +Callers must also re-arm a range with +.B UFFDIO_RWPROTECT +after any operation that explicitly drops the underlying page +.RB ( "MADV_DONTNEED " "on anonymous memory, hole-punch on shmem," +truncation of a file mapping). +.SH RETURN VALUE +On success, +0 is returned. +On error, \-1 is returned and +.I errno +is set to indicate the error. +.SH ERRORS +.TP +.B EINVAL +The +.I start +or the +.I len +field of the +.I uffdio_range +structure was not a multiple of the system page size; +or +.I len +was zero; +or the specified range was otherwise invalid; +or an invalid mode bit was specified; +or +.B UFFDIO_RWPROTECT_MODE_DONTWAKE +was specified together with +.BR UFFDIO_RWPROTECT_MODE_RWP . +.TP +.B EAGAIN +The process was interrupted; +retry this call. +.TP +.B ENOENT +The range specified in +.I range +is not valid. +For example, the virtual address does not exist, +or part of the range is not registered with +.BR UFFDIO_REGISTER_MODE_RWP . +.TP +.B EFAULT +Encountered a generic fault during processing. +.SH STANDARDS +Linux. +.SH HISTORY +Linux 7.2. +.SH EXAMPLES +See +.BR userfaultfd (2). +.SH SEE ALSO +.BR ioctl (2), +.BR ioctl_userfaultfd (2), +.BR userfaultfd (2) +.P +.I linux.git/\:Documentation/\:admin\-guide/\:mm/\:userfaultfd.rst -- 2.54.0