Re: [PATCH v2 2/6] UFFDIO_RWPROTECT.2const: New page
Alejandro Colomar <[email protected]> Thu, 28 May 2026 13:35:06 +0200
| Newsgroups | org.kernel.vger.linux-man,org.kvack.linux-mm |
|---|---|
| Message-ID | <ahgoSq87Hbk5e0J8@devuan> |
Hi Kiryl, On 2026-05-26T14:41:45+0100, Kiryl Shutsemau wrote: > 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 <[email protected]> > Acked-by: Mike Rapoport (Microsoft) <[email protected]> Thanks! I've applied the patch (with a few minor tweaks). Have a lovely day! Alex > --- > man/man2const/UFFDIO_RWPROTECT.2const | 122 ++++++++++++++++++++++++++ > 1 file changed, 122 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..42654a834cd5 > --- /dev/null > +++ b/man/man2const/UFFDIO_RWPROTECT.2const > @@ -0,0 +1,122 @@ > +.\" 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 <linux/userfaultfd.h>" " /* Definition of " UFFD* " constants */" > +.B #include <sys/ioctl.h> > +.P > +.BI "int ioctl(int " fd ", UFFDIO_RWPROTECT, struct uffdio_rwprotect *" argp ); > +.P > +.B #include <linux/userfaultfd.h> > +.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 page present in the range specified by > +.IR range . > +Otherwise the ioctl removes read-write protection from the range, > +which is also how a fault 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: > +.B 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 > -- <https://www.alejandro-colomar.es>
signature.asc
(application/pgp-signature, 833 B)
-----BEGIN PGP SIGNATURE----- iQIzBAABCgAdFiEES7Jt9u9GbmlWADAi64mZXMKQwqkFAmoYKGkACgkQ64mZXMKQ wqk+2BAAl3LZrDJYQbpJXu9NCgWxCQB1upmmlNwbVz1ZRo63QMxR26snfRM98hUH elXYppn3Oe7wmLuwzPu6EAhJCc/DBXRictit79NTRfOgIiXwPy7dfndI2Sfoqk4o zDwJ6WjQCz8pqIIjKodcHK04x0chYnnz24+tu6bmTTKMWEVnDPgb57QuB/o5yoaV p2UhGpBddPKWrDcbhqZTzx0v6KjcjT30kdv2y5W/O2U3ruNh/90M2z5xHS9L/y92 ahcR4DBtEEKDW1VNSGO3oSELJmFRL7uX9b/jLCFxroG5DDHhdUASbHQfmBlxpw4+ Ywn0t/lm7ArQF7yWFJ7hBzkpWMBfTFr+/u5G9WW4gexd6gySl7YKefyzIsdT3H6x QZsaiETkxlC3qYz8wM2+YjnquKef4DRaM3m0KCLqnSjbCPJaazMLnZjK24wTZj4K oh6s578mPayPFMYsWNlUSjh9NQvGxHJQPUNqMLALgm1B+E5y4OjaMgGeImrZtfaf qRf1VGDW5TRFOxiiZJ18w3ND5hn5bY11Rog8SFF5UbKasqPvg72fUm9N7AsYhO1L YQ+pqHO0c68QInJZC+m6yBRPS4L6e7lxAkJJ+rwfCkf4KnRHRp3l/gduyMHGN2ym FGRzMUXIDud753oPo2STb3qyPXit4dv3KuqLB+OGM58iEB1MVyY= =DZ0D -----END PGP SIGNATURE-----