All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2] New page describing userfaultfd(2) system call.
@ 2016-12-29  7:15 Mike Rapoport
       [not found] ` <1482995717-27063-1-git-send-email-rppt-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8@public.gmane.org>
  0 siblings, 1 reply; 6+ messages in thread
From: Mike Rapoport @ 2016-12-29  7:15 UTC (permalink / raw)
  To: Michael Kerrisk
  Cc: Andrea Arcangeli, linux-man-u79uwXL29TY76Z2rM5mHXA, Mike Rapoport

Signed-off-by: Mike Rapoport <rppt-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8@public.gmane.org>
---
v2 changes:
* fix typo in the date
* add paragraph describing error codes returned in uffdio_copy.copy as
suggested by Andrea

I've kept the note about anonymous private mappings and I haven't added the
description of the features that are not yet merged upstream.
I'm going to update the man page as soon as the new features will be in.

 man2/userfaultfd.2 | 332 +++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 332 insertions(+)
 create mode 100644 man2/userfaultfd.2

diff --git a/man2/userfaultfd.2 b/man2/userfaultfd.2
new file mode 100644
index 0000000..1622dcb
--- /dev/null
+++ b/man2/userfaultfd.2
@@ -0,0 +1,332 @@
+.\" Copyright (c) 2016, IBM Corporation.
+.\" Written by Mike Rapoport <rppt-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8@public.gmane.org>
+.\"
+.\" %%%LICENSE_START(VERBATIM)
+.\" Permission is granted to make and distribute verbatim copies of this
+.\" manual provided the copyright notice and this permission notice are
+.\" preserved on all copies.
+.\"
+.\" Permission is granted to copy and distribute modified versions of this
+.\" manual under the conditions for verbatim copying, provided that the
+.\" entire resulting derived work is distributed under the terms of a
+.\" permission notice identical to this one.
+.\"
+.\" Since the Linux kernel and libraries are constantly changing, this
+.\" manual page may be incorrect or out-of-date.  The author(s) assume no
+.\" responsibility for errors or omissions, or for damages resulting from
+.\" the use of the information contained herein.  The author(s) may not
+.\" have taken the same level of care in the production of this manual,
+.\" which is licensed free of charge, as they might when working
+.\" professionally.
+.\"
+.\" Formatted or processed versions of this manual, if unaccompanied by
+.\" the source, must acknowledge the copyright and authors of this work.
+.\" %%%LICENSE_END
+.\"
+.TH USERFAULTFD 2 2016-12-12 "Linux" "Linux Programmer's Manual"
+.SH NAME
+userfaultfd \- create a file descriptor for handling page faults in user
+space
+.SH SYNOPSIS
+.nf
+.B #include <sys/types.h>
+.sp
+.BI "int userfaultfd(int " flags );
+.fi
+.PP
+.IR Note :
+There is no glibc wrapper for this system call; see NOTES.
+.SH DESCRIPTION
+.BR userfaultfd (2)
+creates a userfaultfd object that can be used for delegation of page fault
+handling to a user space application.
+The userfaultfd should be configured using
+.BR ioctl (2).
+Once the userfaultfd is configured, the application can use
+.BR read (2)
+to receive userfaultfd notifications.
+The reads from userfaultfd may be blocking or non-blocking, depending on
+the value of
+.I flags
+used for the creation of the userfaultfd or subsequent calls to
+.BR fcntl (2) .
+
+The following values may be bitwise ORed in
+.IR flags
+to change the behavior of
+.BR userfaultfd ():
+.TP
+.BR O_CLOEXEC
+Enable the close-on-exec flag for the new userfaultfd object.
+See the description of the
+.B O_CLOEXEC
+flag in
+.BR open (2)
+.TP
+.BR O_NONBLOCK
+Enables non-blocking operation for the userfaultfd
+.BR O_NONBLOCK
+See the description of the
+.BR O_NONBLOCK
+flag in
+.BR open (2).
+.\"
+.SS Userfaultfd operation
+After the userfaultfd object is created with
+.BR userfaultfd (2)
+system call, the application have to enable it using
+.I UFFDIO_API
+ioctl to perform API version and supported features handshake between the
+kernel and the user space.
+If the
+.I UFFDIO_API
+is successful, the application should register memory ranges using
+.I UFFDIO_REGISTER
+ioctl. After successful completion of
+.I UFFDIO_REGISTER
+ioctl, a page fault occurring in the requested memory range, and satisfying
+the mode defined at the register time, will be forwarded by the kernel to
+the user space application.
+The application then can use
+.I UFFDIO_COPY
+or
+.I UFFDIO_ZERO
+ioctls to resolve the page fault.
+.PP
+Currently, userfaultfd can only be used with anonymous private memory
+mappings.
+.\"
+.SS API Ioctls
+The API ioctls are used to configure userfaultfd behavior.
+They allow to choose what features will be enabled and what kinds of events
+will be delivered to the application.
+.TP
+.BR "UFFDIO_API	struct uffdio_api *" api
+Enable userfaultfd and perform API handshake.
+The
+.I uffdio_api
+structure is defined as:
+.in +4n
+.nf
+
+struct uffdio_api {
+	__u64 api;
+	__u64 features;
+	__u64 ioctls;
+};
+
+.fi
+.in
+The
+.I api
+field denotes the API version requested by the application.
+The kernel verifies that it can support the required API, and sets the
+.I features
+and
+.I ioctls
+fields to bit masks representing all the available features and the generic
+ioctls available.
+.\"
+.TP
+.BI "UFFDIO_REGISTER	struct uffdio_register *" arg
+Register a memory range with userfaultfd.
+The
+.I uffdio_register
+structure is defined as:
+.in +4n
+.nf
+
+struct uffdio_range {
+	__u64 start;
+	__u64 end;
+};
+
+struct uffdio_register {
+	struct uffdio_range range;
+	__u64 mode;
+	__u64 ioctls;
+};
+
+.fi
+.in
+
+The
+.I range
+field defines a memory range starting at
+.I start
+and ending at
+.I end
+that should be handled by the userfaultfd.
+The
+.I mode
+defines mode of operation desired for this memory region.
+The following values may be bitwise ORed to set the userfaultfd mode for
+particular range:
+.RS
+.sp
+.PD 0
+.TP 12
+.B UFFDIO_REGISTER_MODE_MISSING
+Track page faults on missing pages
+.TP 12
+.B UFFDIO_REGISTER_MODE_WP
+Track page faults on write protected pages.
+Currently the only supported mode is
+.I UFFDIO_REGISTER_MODE_MISSING
+.PD
+.RE
+.IP
+The kernel answers which ioctl commands are available for the requested
+range in the
+.I ioctls
+field.
+.\"
+.TP
+.BI "UFFDIO_UNREGISTER	struct uffdio_register *" arg
+Unregister a memory range from userfaultfd.
+.\"
+.SS Range Ioctls
+The range ioctls enable the calling application to resolve page fault
+events in consistent way.
+.TP
+.BI "UFFDIO_COPY struct uffdio_copy *" arg
+Atomically copy a continuous memory chunk into the userfault registered
+range and optionally wake up the blocked thread.
+The source and destination addresses and the amount of bytes to copy are
+specified by
+.IR src ", " dst ", and " len
+fields of
+.I "struct uffdio_copy"
+respectively:
+
+.in +4n
+.nf
+struct uffdio_copy {
+	__u64 dst;
+	__u64 src;
+	__u64 len;
+	__u64 mode;
+	__s64 copy;
+};
+.nf
+.fi
+
+The following values may be bitwise ORed in
+.IR mode
+to change the behavior of
+.I UFFDIO_COPY
+ioctl:
+.RS
+.sp
+.PD 0
+.TP 12
+.B UFFDIO_COPY_MODE_DONTWAKE
+Do not wake up the thread that waits for page fault resolution
+.PD
+.RE
+.IP
+The
+.I copy
+field of the
+.I uffdio_copy
+structure is used by the kernel to return amount of bytes that was actually
+copied, or an error.
+If
+.I uffdio_copy.copy
+doesn't match the
+.I uffdio_copy.len
+passed in input to
+.IR UFFDIO_COPY ,
+the ioctl will return
+.BR -EAGAIN .
+If the ioctl returns zero it means it succeeded, no error was reported and
+the entire area was copied.
+If a an invalid fault happens while writing to the
+.I uffdio_copy.copy
+field, the syscall will return
+.BR -EFAULT .
+.I uffdio_copy.copy
+is an output-only field so it is not being read by the UFFDIO_COPY ioctl.
+
+.\"
+.TP
+.BI "UFFDIO_ZERO struct uffdio_zero *" arg
+Zero out a part of memory range registered with userfaultfd.
+The requested range is specified by
+.I range
+field of
+.I uffdio_zeropage
+structure:
+
+.in +4n
+.nf
+struct uffdio_zeropage {
+	struct uffdio_range range;
+	__u64 mode;
+	__s64 zeropage;
+};
+.nf
+.fi
+
+The following values may be bitwise ORed in
+.IR mode
+to change the behavior of
+.I UFFDIO_ZERO
+ioctl:
+.RS
+.sp
+.PD 0
+.TP 12
+.B UFFDIO_ZEROPAGE_MODE_DONTWAKE
+Do not wake up the thread that waits for page fault resolution
+.PD
+.RE
+.IP
+The
+.I zeropage
+field of the
+.I uffdio_zero
+structure is used by the kernel to return amount of bytes that was actually
+zeroed, or an error the same way like
+.IR uffdio_copy.copy .
+.\"
+.TP
+.BI "UFFDIO_WAKE struct uffdio_range *" arg
+Wake up the thread waiting for the page fault resolution.
+.SH RETURN VALUE
+For a successful call, the
+.BR userfaultfd (2)
+system call returns the new file descriptor for the userfaultfd object.
+On error, \-1 is returned, and
+.I errno
+is set appropriately.
+.SH ERRORS
+.TP
+.B EINVAL
+An unsupported value was specified in
+.IR flags .
+.TP
+.BR EMFILE
+The per-process limit on the number of open file descriptors has been
+reached
+.TP
+.B ENFILE
+The system-wide limit on the total number of open files has been
+reached.
+.TP
+.B ENOMEM
+Insufficient kernel memory was available.
+.SH CONFORMING TO
+.BR userfaultfd ()
+is Linux-specific and should not be used in programs intended to be
+portable.
+.SH NOTES
+Glibc does not provide a wrapper for this system call; call it using
+.BR syscall (2).
+.SH SEE ALSO
+.BR fcntl (2),
+.BR ioctl (2)
+
+.IR Documentation/vm/userfaultfd.txt
+in the Linux kernel source tree
+
-- 
1.9.1

--
To unsubscribe from this list: send the line "unsubscribe linux-man" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [PATCH v2] New page describing userfaultfd(2) system call.
       [not found] ` <1482995717-27063-1-git-send-email-rppt-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8@public.gmane.org>
@ 2016-12-29 13:22   ` Andrea Arcangeli
       [not found]     ` <20161229132215.GA6984-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
  2016-12-29 15:08   ` Michael Kerrisk (man-pages)
  1 sibling, 1 reply; 6+ messages in thread
From: Andrea Arcangeli @ 2016-12-29 13:22 UTC (permalink / raw)
  To: Mike Rapoport; +Cc: Michael Kerrisk, linux-man-u79uwXL29TY76Z2rM5mHXA

Hello,

On Thu, Dec 29, 2016 at 09:15:17AM +0200, Mike Rapoport wrote:
> +.in +4n
> +.nf
> +struct uffdio_copy {
> +	__u64 dst;
> +	__u64 src;
> +	__u64 len;
> +	__u64 mode;
> +	__s64 copy;
> +};
> +.nf

-.nf

> +.fi

+.in

> +.in +4n
> +.nf
> +struct uffdio_zeropage {
> +	struct uffdio_range range;
> +	__u64 mode;
> +	__s64 zeropage;
> +};
> +.nf

-.nf

> +.fi

+.in

The block opening/closing around the uffdio_copy/zeropage structs
looks more correct in the previous ioctl descriptions so the next line
that follows isn't indented.

Reviewed-by: Andrea Arcangeli <aarcange-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
--
To unsubscribe from this list: send the line "unsubscribe linux-man" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH v2] New page describing userfaultfd(2) system call.
       [not found] ` <1482995717-27063-1-git-send-email-rppt-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8@public.gmane.org>
  2016-12-29 13:22   ` Andrea Arcangeli
@ 2016-12-29 15:08   ` Michael Kerrisk (man-pages)
       [not found]     ` <3ffbeecb-03b7-eb00-37e2-9899e14f58ec-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
  1 sibling, 1 reply; 6+ messages in thread
From: Michael Kerrisk (man-pages) @ 2016-12-29 15:08 UTC (permalink / raw)
  To: Mike Rapoport
  Cc: mtk.manpages-Re5JQEeQqe8AvxtiuMwx3w, Andrea Arcangeli,
	linux-man-u79uwXL29TY76Z2rM5mHXA

On 12/29/2016 08:15 AM, Mike Rapoport wrote:
> Signed-off-by: Mike Rapoport <rppt-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8@public.gmane.org>
> ---
> v2 changes:
> * fix typo in the date
> * add paragraph describing error codes returned in uffdio_copy.copy as
> suggested by Andrea

Hi Mike,

I've taken this page, and am now editing it.

Cheers,

Michael

> I've kept the note about anonymous private mappings and I haven't added the
> description of the features that are not yet merged upstream.
> I'm going to update the man page as soon as the new features will be in.
> 
>  man2/userfaultfd.2 | 332 +++++++++++++++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 332 insertions(+)
>  create mode 100644 man2/userfaultfd.2
> 
> diff --git a/man2/userfaultfd.2 b/man2/userfaultfd.2
> new file mode 100644
> index 0000000..1622dcb
> --- /dev/null
> +++ b/man2/userfaultfd.2
> @@ -0,0 +1,332 @@
> +.\" Copyright (c) 2016, IBM Corporation.
> +.\" Written by Mike Rapoport <rppt-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8@public.gmane.org>
> +.\"
> +.\" %%%LICENSE_START(VERBATIM)
> +.\" Permission is granted to make and distribute verbatim copies of this
> +.\" manual provided the copyright notice and this permission notice are
> +.\" preserved on all copies.
> +.\"
> +.\" Permission is granted to copy and distribute modified versions of this
> +.\" manual under the conditions for verbatim copying, provided that the
> +.\" entire resulting derived work is distributed under the terms of a
> +.\" permission notice identical to this one.
> +.\"
> +.\" Since the Linux kernel and libraries are constantly changing, this
> +.\" manual page may be incorrect or out-of-date.  The author(s) assume no
> +.\" responsibility for errors or omissions, or for damages resulting from
> +.\" the use of the information contained herein.  The author(s) may not
> +.\" have taken the same level of care in the production of this manual,
> +.\" which is licensed free of charge, as they might when working
> +.\" professionally.
> +.\"
> +.\" Formatted or processed versions of this manual, if unaccompanied by
> +.\" the source, must acknowledge the copyright and authors of this work.
> +.\" %%%LICENSE_END
> +.\"
> +.TH USERFAULTFD 2 2016-12-12 "Linux" "Linux Programmer's Manual"
> +.SH NAME
> +userfaultfd \- create a file descriptor for handling page faults in user
> +space
> +.SH SYNOPSIS
> +.nf
> +.B #include <sys/types.h>
> +.sp
> +.BI "int userfaultfd(int " flags );
> +.fi
> +.PP
> +.IR Note :
> +There is no glibc wrapper for this system call; see NOTES.
> +.SH DESCRIPTION
> +.BR userfaultfd (2)
> +creates a userfaultfd object that can be used for delegation of page fault
> +handling to a user space application.
> +The userfaultfd should be configured using
> +.BR ioctl (2).
> +Once the userfaultfd is configured, the application can use
> +.BR read (2)
> +to receive userfaultfd notifications.
> +The reads from userfaultfd may be blocking or non-blocking, depending on
> +the value of
> +.I flags
> +used for the creation of the userfaultfd or subsequent calls to
> +.BR fcntl (2) .
> +
> +The following values may be bitwise ORed in
> +.IR flags
> +to change the behavior of
> +.BR userfaultfd ():
> +.TP
> +.BR O_CLOEXEC
> +Enable the close-on-exec flag for the new userfaultfd object.
> +See the description of the
> +.B O_CLOEXEC
> +flag in
> +.BR open (2)
> +.TP
> +.BR O_NONBLOCK
> +Enables non-blocking operation for the userfaultfd
> +.BR O_NONBLOCK
> +See the description of the
> +.BR O_NONBLOCK
> +flag in
> +.BR open (2).
> +.\"
> +.SS Userfaultfd operation
> +After the userfaultfd object is created with
> +.BR userfaultfd (2)
> +system call, the application have to enable it using
> +.I UFFDIO_API
> +ioctl to perform API version and supported features handshake between the
> +kernel and the user space.
> +If the
> +.I UFFDIO_API
> +is successful, the application should register memory ranges using
> +.I UFFDIO_REGISTER
> +ioctl. After successful completion of
> +.I UFFDIO_REGISTER
> +ioctl, a page fault occurring in the requested memory range, and satisfying
> +the mode defined at the register time, will be forwarded by the kernel to
> +the user space application.
> +The application then can use
> +.I UFFDIO_COPY
> +or
> +.I UFFDIO_ZERO
> +ioctls to resolve the page fault.
> +.PP
> +Currently, userfaultfd can only be used with anonymous private memory
> +mappings.
> +.\"
> +.SS API Ioctls
> +The API ioctls are used to configure userfaultfd behavior.
> +They allow to choose what features will be enabled and what kinds of events
> +will be delivered to the application.
> +.TP
> +.BR "UFFDIO_API	struct uffdio_api *" api
> +Enable userfaultfd and perform API handshake.
> +The
> +.I uffdio_api
> +structure is defined as:
> +.in +4n
> +.nf
> +
> +struct uffdio_api {
> +	__u64 api;
> +	__u64 features;
> +	__u64 ioctls;
> +};
> +
> +.fi
> +.in
> +The
> +.I api
> +field denotes the API version requested by the application.
> +The kernel verifies that it can support the required API, and sets the
> +.I features
> +and
> +.I ioctls
> +fields to bit masks representing all the available features and the generic
> +ioctls available.
> +.\"
> +.TP
> +.BI "UFFDIO_REGISTER	struct uffdio_register *" arg
> +Register a memory range with userfaultfd.
> +The
> +.I uffdio_register
> +structure is defined as:
> +.in +4n
> +.nf
> +
> +struct uffdio_range {
> +	__u64 start;
> +	__u64 end;
> +};
> +
> +struct uffdio_register {
> +	struct uffdio_range range;
> +	__u64 mode;
> +	__u64 ioctls;
> +};
> +
> +.fi
> +.in
> +
> +The
> +.I range
> +field defines a memory range starting at
> +.I start
> +and ending at
> +.I end
> +that should be handled by the userfaultfd.
> +The
> +.I mode
> +defines mode of operation desired for this memory region.
> +The following values may be bitwise ORed to set the userfaultfd mode for
> +particular range:
> +.RS
> +.sp
> +.PD 0
> +.TP 12
> +.B UFFDIO_REGISTER_MODE_MISSING
> +Track page faults on missing pages
> +.TP 12
> +.B UFFDIO_REGISTER_MODE_WP
> +Track page faults on write protected pages.
> +Currently the only supported mode is
> +.I UFFDIO_REGISTER_MODE_MISSING
> +.PD
> +.RE
> +.IP
> +The kernel answers which ioctl commands are available for the requested
> +range in the
> +.I ioctls
> +field.
> +.\"
> +.TP
> +.BI "UFFDIO_UNREGISTER	struct uffdio_register *" arg
> +Unregister a memory range from userfaultfd.
> +.\"
> +.SS Range Ioctls
> +The range ioctls enable the calling application to resolve page fault
> +events in consistent way.
> +.TP
> +.BI "UFFDIO_COPY struct uffdio_copy *" arg
> +Atomically copy a continuous memory chunk into the userfault registered
> +range and optionally wake up the blocked thread.
> +The source and destination addresses and the amount of bytes to copy are
> +specified by
> +.IR src ", " dst ", and " len
> +fields of
> +.I "struct uffdio_copy"
> +respectively:
> +
> +.in +4n
> +.nf
> +struct uffdio_copy {
> +	__u64 dst;
> +	__u64 src;
> +	__u64 len;
> +	__u64 mode;
> +	__s64 copy;
> +};
> +.nf
> +.fi
> +
> +The following values may be bitwise ORed in
> +.IR mode
> +to change the behavior of
> +.I UFFDIO_COPY
> +ioctl:
> +.RS
> +.sp
> +.PD 0
> +.TP 12
> +.B UFFDIO_COPY_MODE_DONTWAKE
> +Do not wake up the thread that waits for page fault resolution
> +.PD
> +.RE
> +.IP
> +The
> +.I copy
> +field of the
> +.I uffdio_copy
> +structure is used by the kernel to return amount of bytes that was actually
> +copied, or an error.
> +If
> +.I uffdio_copy.copy
> +doesn't match the
> +.I uffdio_copy.len
> +passed in input to
> +.IR UFFDIO_COPY ,
> +the ioctl will return
> +.BR -EAGAIN .
> +If the ioctl returns zero it means it succeeded, no error was reported and
> +the entire area was copied.
> +If a an invalid fault happens while writing to the
> +.I uffdio_copy.copy
> +field, the syscall will return
> +.BR -EFAULT .
> +.I uffdio_copy.copy
> +is an output-only field so it is not being read by the UFFDIO_COPY ioctl.
> +
> +.\"
> +.TP
> +.BI "UFFDIO_ZERO struct uffdio_zero *" arg
> +Zero out a part of memory range registered with userfaultfd.
> +The requested range is specified by
> +.I range
> +field of
> +.I uffdio_zeropage
> +structure:
> +
> +.in +4n
> +.nf
> +struct uffdio_zeropage {
> +	struct uffdio_range range;
> +	__u64 mode;
> +	__s64 zeropage;
> +};
> +.nf
> +.fi
> +
> +The following values may be bitwise ORed in
> +.IR mode
> +to change the behavior of
> +.I UFFDIO_ZERO
> +ioctl:
> +.RS
> +.sp
> +.PD 0
> +.TP 12
> +.B UFFDIO_ZEROPAGE_MODE_DONTWAKE
> +Do not wake up the thread that waits for page fault resolution
> +.PD
> +.RE
> +.IP
> +The
> +.I zeropage
> +field of the
> +.I uffdio_zero
> +structure is used by the kernel to return amount of bytes that was actually
> +zeroed, or an error the same way like
> +.IR uffdio_copy.copy .
> +.\"
> +.TP
> +.BI "UFFDIO_WAKE struct uffdio_range *" arg
> +Wake up the thread waiting for the page fault resolution.
> +.SH RETURN VALUE
> +For a successful call, the
> +.BR userfaultfd (2)
> +system call returns the new file descriptor for the userfaultfd object.
> +On error, \-1 is returned, and
> +.I errno
> +is set appropriately.
> +.SH ERRORS
> +.TP
> +.B EINVAL
> +An unsupported value was specified in
> +.IR flags .
> +.TP
> +.BR EMFILE
> +The per-process limit on the number of open file descriptors has been
> +reached
> +.TP
> +.B ENFILE
> +The system-wide limit on the total number of open files has been
> +reached.
> +.TP
> +.B ENOMEM
> +Insufficient kernel memory was available.
> +.SH CONFORMING TO
> +.BR userfaultfd ()
> +is Linux-specific and should not be used in programs intended to be
> +portable.
> +.SH NOTES
> +Glibc does not provide a wrapper for this system call; call it using
> +.BR syscall (2).
> +.SH SEE ALSO
> +.BR fcntl (2),
> +.BR ioctl (2)
> +
> +.IR Documentation/vm/userfaultfd.txt
> +in the Linux kernel source tree
> +
> 


-- 
Michael Kerrisk
Linux man-pages maintainer; http://www.kernel.org/doc/man-pages/
Linux/UNIX System Programming Training: http://man7.org/training/
--
To unsubscribe from this list: send the line "unsubscribe linux-man" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH v2] New page describing userfaultfd(2) system call.
       [not found]     ` <20161229132215.GA6984-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
@ 2016-12-29 20:02       ` Michael Kerrisk (man-pages)
  0 siblings, 0 replies; 6+ messages in thread
From: Michael Kerrisk (man-pages) @ 2016-12-29 20:02 UTC (permalink / raw)
  To: Andrea Arcangeli, Mike Rapoport
  Cc: mtk.manpages-Re5JQEeQqe8AvxtiuMwx3w, linux-man-u79uwXL29TY76Z2rM5mHXA

On 12/29/2016 02:22 PM, Andrea Arcangeli wrote:
> Hello,
> 
> On Thu, Dec 29, 2016 at 09:15:17AM +0200, Mike Rapoport wrote:
>> +.in +4n
>> +.nf
>> +struct uffdio_copy {
>> +	__u64 dst;
>> +	__u64 src;
>> +	__u64 len;
>> +	__u64 mode;
>> +	__s64 copy;
>> +};
>> +.nf
> 
> -.nf
> 
>> +.fi
> 
> +.in
> 
>> +.in +4n
>> +.nf
>> +struct uffdio_zeropage {
>> +	struct uffdio_range range;
>> +	__u64 mode;
>> +	__s64 zeropage;
>> +};
>> +.nf
> 
> -.nf
> 
>> +.fi
> 
> +.in
> 
> The block opening/closing around the uffdio_copy/zeropage structs
> looks more correct in the previous ioctl descriptions so the next line
> that follows isn't indented.

Thanks, Andrea. Fixed!

> Reviewed-by: Andrea Arcangeli <aarcange-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>

Thanks. Added this to the git log.

Cheers,

Michael

-- 
Michael Kerrisk
Linux man-pages maintainer; http://www.kernel.org/doc/man-pages/
Linux/UNIX System Programming Training: http://man7.org/training/
--
To unsubscribe from this list: send the line "unsubscribe linux-man" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH v2] New page describing userfaultfd(2) system call.
       [not found]     ` <3ffbeecb-03b7-eb00-37e2-9899e14f58ec-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
@ 2017-02-20  9:23       ` Mike Rapoport
  2017-03-20 15:11       ` Mike Rapoport
  1 sibling, 0 replies; 6+ messages in thread
From: Mike Rapoport @ 2017-02-20  9:23 UTC (permalink / raw)
  To: Michael Kerrisk (man-pages)
  Cc: Andrea Arcangeli, linux-man-u79uwXL29TY76Z2rM5mHXA

Hello Michael,

On Thu, Dec 29, 2016 at 04:08:26PM +0100, Michael Kerrisk (man-pages) wrote:
> On 12/29/2016 08:15 AM, Mike Rapoport wrote:
> > Signed-off-by: Mike Rapoport <rppt-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8@public.gmane.org>
> > ---
> > v2 changes:
> > * fix typo in the date
> > * add paragraph describing error codes returned in uffdio_copy.copy as
> > suggested by Andrea
> 
> Hi Mike,
> 
> I've taken this page, and am now editing it.

Any updates on the userfaultfd man page?
 
> Cheers,
> 
> Michael
> 

--
Sincerely yours,
Mike.

> > I've kept the note about anonymous private mappings and I haven't added the
> > description of the features that are not yet merged upstream.
> > I'm going to update the man page as soon as the new features will be in.
> > 
> >  man2/userfaultfd.2 | 332 +++++++++++++++++++++++++++++++++++++++++++++++++++++
> >  1 file changed, 332 insertions(+)
> >  create mode 100644 man2/userfaultfd.2
> > 
> > diff --git a/man2/userfaultfd.2 b/man2/userfaultfd.2
> > new file mode 100644
> > index 0000000..1622dcb
> > --- /dev/null
> > +++ b/man2/userfaultfd.2
> > @@ -0,0 +1,332 @@
> > +.\" Copyright (c) 2016, IBM Corporation.
> > +.\" Written by Mike Rapoport <rppt-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8@public.gmane.org>
> > +.\"
> > +.\" %%%LICENSE_START(VERBATIM)
> > +.\" Permission is granted to make and distribute verbatim copies of this
> > +.\" manual provided the copyright notice and this permission notice are
> > +.\" preserved on all copies.
> > +.\"
> > +.\" Permission is granted to copy and distribute modified versions of this
> > +.\" manual under the conditions for verbatim copying, provided that the
> > +.\" entire resulting derived work is distributed under the terms of a
> > +.\" permission notice identical to this one.
> > +.\"
> > +.\" Since the Linux kernel and libraries are constantly changing, this
> > +.\" manual page may be incorrect or out-of-date.  The author(s) assume no
> > +.\" responsibility for errors or omissions, or for damages resulting from
> > +.\" the use of the information contained herein.  The author(s) may not
> > +.\" have taken the same level of care in the production of this manual,
> > +.\" which is licensed free of charge, as they might when working
> > +.\" professionally.
> > +.\"
> > +.\" Formatted or processed versions of this manual, if unaccompanied by
> > +.\" the source, must acknowledge the copyright and authors of this work.
> > +.\" %%%LICENSE_END
> > +.\"
> > +.TH USERFAULTFD 2 2016-12-12 "Linux" "Linux Programmer's Manual"
> > +.SH NAME
> > +userfaultfd \- create a file descriptor for handling page faults in user
> > +space
> > +.SH SYNOPSIS
> > +.nf
> > +.B #include <sys/types.h>
> > +.sp
> > +.BI "int userfaultfd(int " flags );
> > +.fi
> > +.PP
> > +.IR Note :
> > +There is no glibc wrapper for this system call; see NOTES.
> > +.SH DESCRIPTION
> > +.BR userfaultfd (2)
> > +creates a userfaultfd object that can be used for delegation of page fault
> > +handling to a user space application.
> > +The userfaultfd should be configured using
> > +.BR ioctl (2).
> > +Once the userfaultfd is configured, the application can use
> > +.BR read (2)
> > +to receive userfaultfd notifications.
> > +The reads from userfaultfd may be blocking or non-blocking, depending on
> > +the value of
> > +.I flags
> > +used for the creation of the userfaultfd or subsequent calls to
> > +.BR fcntl (2) .
> > +
> > +The following values may be bitwise ORed in
> > +.IR flags
> > +to change the behavior of
> > +.BR userfaultfd ():
> > +.TP
> > +.BR O_CLOEXEC
> > +Enable the close-on-exec flag for the new userfaultfd object.
> > +See the description of the
> > +.B O_CLOEXEC
> > +flag in
> > +.BR open (2)
> > +.TP
> > +.BR O_NONBLOCK
> > +Enables non-blocking operation for the userfaultfd
> > +.BR O_NONBLOCK
> > +See the description of the
> > +.BR O_NONBLOCK
> > +flag in
> > +.BR open (2).
> > +.\"
> > +.SS Userfaultfd operation
> > +After the userfaultfd object is created with
> > +.BR userfaultfd (2)
> > +system call, the application have to enable it using
> > +.I UFFDIO_API
> > +ioctl to perform API version and supported features handshake between the
> > +kernel and the user space.
> > +If the
> > +.I UFFDIO_API
> > +is successful, the application should register memory ranges using
> > +.I UFFDIO_REGISTER
> > +ioctl. After successful completion of
> > +.I UFFDIO_REGISTER
> > +ioctl, a page fault occurring in the requested memory range, and satisfying
> > +the mode defined at the register time, will be forwarded by the kernel to
> > +the user space application.
> > +The application then can use
> > +.I UFFDIO_COPY
> > +or
> > +.I UFFDIO_ZERO
> > +ioctls to resolve the page fault.
> > +.PP
> > +Currently, userfaultfd can only be used with anonymous private memory
> > +mappings.
> > +.\"
> > +.SS API Ioctls
> > +The API ioctls are used to configure userfaultfd behavior.
> > +They allow to choose what features will be enabled and what kinds of events
> > +will be delivered to the application.
> > +.TP
> > +.BR "UFFDIO_API	struct uffdio_api *" api
> > +Enable userfaultfd and perform API handshake.
> > +The
> > +.I uffdio_api
> > +structure is defined as:
> > +.in +4n
> > +.nf
> > +
> > +struct uffdio_api {
> > +	__u64 api;
> > +	__u64 features;
> > +	__u64 ioctls;
> > +};
> > +
> > +.fi
> > +.in
> > +The
> > +.I api
> > +field denotes the API version requested by the application.
> > +The kernel verifies that it can support the required API, and sets the
> > +.I features
> > +and
> > +.I ioctls
> > +fields to bit masks representing all the available features and the generic
> > +ioctls available.
> > +.\"
> > +.TP
> > +.BI "UFFDIO_REGISTER	struct uffdio_register *" arg
> > +Register a memory range with userfaultfd.
> > +The
> > +.I uffdio_register
> > +structure is defined as:
> > +.in +4n
> > +.nf
> > +
> > +struct uffdio_range {
> > +	__u64 start;
> > +	__u64 end;
> > +};
> > +
> > +struct uffdio_register {
> > +	struct uffdio_range range;
> > +	__u64 mode;
> > +	__u64 ioctls;
> > +};
> > +
> > +.fi
> > +.in
> > +
> > +The
> > +.I range
> > +field defines a memory range starting at
> > +.I start
> > +and ending at
> > +.I end
> > +that should be handled by the userfaultfd.
> > +The
> > +.I mode
> > +defines mode of operation desired for this memory region.
> > +The following values may be bitwise ORed to set the userfaultfd mode for
> > +particular range:
> > +.RS
> > +.sp
> > +.PD 0
> > +.TP 12
> > +.B UFFDIO_REGISTER_MODE_MISSING
> > +Track page faults on missing pages
> > +.TP 12
> > +.B UFFDIO_REGISTER_MODE_WP
> > +Track page faults on write protected pages.
> > +Currently the only supported mode is
> > +.I UFFDIO_REGISTER_MODE_MISSING
> > +.PD
> > +.RE
> > +.IP
> > +The kernel answers which ioctl commands are available for the requested
> > +range in the
> > +.I ioctls
> > +field.
> > +.\"
> > +.TP
> > +.BI "UFFDIO_UNREGISTER	struct uffdio_register *" arg
> > +Unregister a memory range from userfaultfd.
> > +.\"
> > +.SS Range Ioctls
> > +The range ioctls enable the calling application to resolve page fault
> > +events in consistent way.
> > +.TP
> > +.BI "UFFDIO_COPY struct uffdio_copy *" arg
> > +Atomically copy a continuous memory chunk into the userfault registered
> > +range and optionally wake up the blocked thread.
> > +The source and destination addresses and the amount of bytes to copy are
> > +specified by
> > +.IR src ", " dst ", and " len
> > +fields of
> > +.I "struct uffdio_copy"
> > +respectively:
> > +
> > +.in +4n
> > +.nf
> > +struct uffdio_copy {
> > +	__u64 dst;
> > +	__u64 src;
> > +	__u64 len;
> > +	__u64 mode;
> > +	__s64 copy;
> > +};
> > +.nf
> > +.fi
> > +
> > +The following values may be bitwise ORed in
> > +.IR mode
> > +to change the behavior of
> > +.I UFFDIO_COPY
> > +ioctl:
> > +.RS
> > +.sp
> > +.PD 0
> > +.TP 12
> > +.B UFFDIO_COPY_MODE_DONTWAKE
> > +Do not wake up the thread that waits for page fault resolution
> > +.PD
> > +.RE
> > +.IP
> > +The
> > +.I copy
> > +field of the
> > +.I uffdio_copy
> > +structure is used by the kernel to return amount of bytes that was actually
> > +copied, or an error.
> > +If
> > +.I uffdio_copy.copy
> > +doesn't match the
> > +.I uffdio_copy.len
> > +passed in input to
> > +.IR UFFDIO_COPY ,
> > +the ioctl will return
> > +.BR -EAGAIN .
> > +If the ioctl returns zero it means it succeeded, no error was reported and
> > +the entire area was copied.
> > +If a an invalid fault happens while writing to the
> > +.I uffdio_copy.copy
> > +field, the syscall will return
> > +.BR -EFAULT .
> > +.I uffdio_copy.copy
> > +is an output-only field so it is not being read by the UFFDIO_COPY ioctl.
> > +
> > +.\"
> > +.TP
> > +.BI "UFFDIO_ZERO struct uffdio_zero *" arg
> > +Zero out a part of memory range registered with userfaultfd.
> > +The requested range is specified by
> > +.I range
> > +field of
> > +.I uffdio_zeropage
> > +structure:
> > +
> > +.in +4n
> > +.nf
> > +struct uffdio_zeropage {
> > +	struct uffdio_range range;
> > +	__u64 mode;
> > +	__s64 zeropage;
> > +};
> > +.nf
> > +.fi
> > +
> > +The following values may be bitwise ORed in
> > +.IR mode
> > +to change the behavior of
> > +.I UFFDIO_ZERO
> > +ioctl:
> > +.RS
> > +.sp
> > +.PD 0
> > +.TP 12
> > +.B UFFDIO_ZEROPAGE_MODE_DONTWAKE
> > +Do not wake up the thread that waits for page fault resolution
> > +.PD
> > +.RE
> > +.IP
> > +The
> > +.I zeropage
> > +field of the
> > +.I uffdio_zero
> > +structure is used by the kernel to return amount of bytes that was actually
> > +zeroed, or an error the same way like
> > +.IR uffdio_copy.copy .
> > +.\"
> > +.TP
> > +.BI "UFFDIO_WAKE struct uffdio_range *" arg
> > +Wake up the thread waiting for the page fault resolution.
> > +.SH RETURN VALUE
> > +For a successful call, the
> > +.BR userfaultfd (2)
> > +system call returns the new file descriptor for the userfaultfd object.
> > +On error, \-1 is returned, and
> > +.I errno
> > +is set appropriately.
> > +.SH ERRORS
> > +.TP
> > +.B EINVAL
> > +An unsupported value was specified in
> > +.IR flags .
> > +.TP
> > +.BR EMFILE
> > +The per-process limit on the number of open file descriptors has been
> > +reached
> > +.TP
> > +.B ENFILE
> > +The system-wide limit on the total number of open files has been
> > +reached.
> > +.TP
> > +.B ENOMEM
> > +Insufficient kernel memory was available.
> > +.SH CONFORMING TO
> > +.BR userfaultfd ()
> > +is Linux-specific and should not be used in programs intended to be
> > +portable.
> > +.SH NOTES
> > +Glibc does not provide a wrapper for this system call; call it using
> > +.BR syscall (2).
> > +.SH SEE ALSO
> > +.BR fcntl (2),
> > +.BR ioctl (2)
> > +
> > +.IR Documentation/vm/userfaultfd.txt
> > +in the Linux kernel source tree
> > +
> > 
> 
> 
> -- 
> Michael Kerrisk
> Linux man-pages maintainer; http://www.kernel.org/doc/man-pages/
> Linux/UNIX System Programming Training: http://man7.org/training/
> 

--
To unsubscribe from this list: send the line "unsubscribe linux-man" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH v2] New page describing userfaultfd(2) system call.
       [not found]     ` <3ffbeecb-03b7-eb00-37e2-9899e14f58ec-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
  2017-02-20  9:23       ` Mike Rapoport
@ 2017-03-20 15:11       ` Mike Rapoport
  1 sibling, 0 replies; 6+ messages in thread
From: Mike Rapoport @ 2017-03-20 15:11 UTC (permalink / raw)
  To: Michael Kerrisk (man-pages)
  Cc: Andrea Arcangeli, linux-man-u79uwXL29TY76Z2rM5mHXA

Hello Michael,

On Thu, Dec 29, 2016 at 04:08:26PM +0100, Michael Kerrisk (man-pages) wrote:
> On 12/29/2016 08:15 AM, Mike Rapoport wrote:
> > Signed-off-by: Mike Rapoport <rppt-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8@public.gmane.org>
> > ---
> > v2 changes:
> > * fix typo in the date
> > * add paragraph describing error codes returned in uffdio_copy.copy as
> > suggested by Andrea
> 
> Hi Mike,
> 
> I've taken this page, and am now editing it.

Any updates about the userfaultfd(2) man-page?
 
> Cheers,
> 
> Michael

--
Sincerely yours,
Mike.

--
To unsubscribe from this list: send the line "unsubscribe linux-man" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2017-03-20 15:11 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-12-29  7:15 [PATCH v2] New page describing userfaultfd(2) system call Mike Rapoport
     [not found] ` <1482995717-27063-1-git-send-email-rppt-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8@public.gmane.org>
2016-12-29 13:22   ` Andrea Arcangeli
     [not found]     ` <20161229132215.GA6984-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2016-12-29 20:02       ` Michael Kerrisk (man-pages)
2016-12-29 15:08   ` Michael Kerrisk (man-pages)
     [not found]     ` <3ffbeecb-03b7-eb00-37e2-9899e14f58ec-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2017-02-20  9:23       ` Mike Rapoport
2017-03-20 15:11       ` Mike Rapoport

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.