+
+#. type: TH
+#: build/C/man2/memfd_create.2:21
+#, no-wrap
+msgid "MEMFD_CREATE"
+msgstr ""
+
+#. type: Plain text
+#: build/C/man2/memfd_create.2:24
+msgid "memfd_create - create an anonymous file"
+msgstr ""
+
+#. type: Plain text
+#: build/C/man2/memfd_create.2:26
+msgid "B<#include E<lt>sys/memfd.hE<gt>>"
+msgstr ""
+
+#. type: Plain text
+#: build/C/man2/memfd_create.2:28
+msgid "B<int memfd_create(const char *>I<name>B<, unsigned int >I<flags>B<);>"
+msgstr ""
+
+#. David Herrmann:
+#. memfd uses VM_NORESERVE so each page is accounted on first access.
+#. This means, the overcommit-limits (see __vm_enough_memory()) and the
+#. memory-cgroup limits (mem_cgroup_try_charge()) are applied. Note that
+#. those are accounted on "current" and "current->mm", that is, the
+#. process doing the first page access.
+#. type: Plain text
+#: build/C/man2/memfd_create.2:51
+msgid ""
+"B<memfd_create>() creates an anonymous file and returns a file descriptor "
+"that refers to it. The file behaves like a regular file, and so can be "
+"modified, truncated, memory-mapped, and so on. However, unlike a regular "
+"file, it lives in RAM and has a volatile backing storage. Once all "
+"references to the file are dropped, it is automatically released. Anonymous "
+"memory is used for all backing pages of the file. Therefore, files created "
+"by B<memfd_create>() have the same semantics as other anonymous memory "
+"allocations such as those allocated using B<mmap>(2) with the "
+"B<MAP_ANONYMOUS> flag."
+msgstr ""
+
+#. type: Plain text
+#: build/C/man2/memfd_create.2:58
+msgid ""
+"The initial size of the file is set to 0. Following the call, the file size "
+"should be set using B<ftruncate>(2). (Alternatively, the file may be "
+"populated by calls to B<write>(2) or similar.)"
+msgstr ""
+
+#. type: Plain text
+#: build/C/man2/memfd_create.2:69
+msgid ""
+"The name supplied in I<name> is used as a filename and will be displayed as "
+"the target of the corresponding symbolic link in the directory "
+"I</proc/self/fd/>. The displayed name is always prefixed with I<memfd:> and "
+"serves only for debugging purposes. Names do not affect the behavior of the "
+"file descriptor, and as such multiple files can have the same name without "
+"any side effects."
+msgstr ""
+
+#. type: Plain text
+#: build/C/man2/memfd_create.2:74
+msgid ""
+"The following values may be bitwise ORed in I<flags> to change the behaviour "
+"of B<memfd_create>():"
+msgstr ""
+
+#. type: TP
+#: build/C/man2/memfd_create.2:74
+#, no-wrap
+msgid "B<MFD_CLOEXEC>"
+msgstr ""
+
+#. type: Plain text
+#: build/C/man2/memfd_create.2:84
+msgid ""
+"Set the close-on-exec (B<FD_CLOEXEC>) flag on the new file descriptor. See "
+"the description of the B<O_CLOEXEC> flag in B<open>(2) for reasons why this "
+"may be useful."
+msgstr ""
+
+#. type: TP
+#: build/C/man2/memfd_create.2:84
+#, no-wrap
+msgid "B<MFD_ALLOW_SEALING>"
+msgstr ""
+
+#. FIXME Why is the MFD_ALLOW_SEALING behavior not simply the default?
+#. Is it worth adding some text explaining this?
+#. type: Plain text
+#: build/C/man2/memfd_create.2:100
+msgid ""
+"Allow sealing operations on this file. See the discussion of the "
+"B<F_ADD_SEALS> and B<F_GET_SEALS> operations in B<fcntl>(2), and also NOTES, "
+"below. The initial set of seals is empty. If this flag is not set, the "
+"initial set of seals will be B<F_SEAL_SEAL>, meaning that no other seals can "
+"be set on the file."
+msgstr ""
+
+#. type: Plain text
+#: build/C/man2/memfd_create.2:104
+msgid "Unused bits in I<flags> must be 0."
+msgstr ""
+
+#. type: Plain text
+#: build/C/man2/memfd_create.2:113
+msgid ""
+"As its return value, B<memfd_create>() returns a new file descriptor that "
+"can be used to refer to the file. This file descriptor is opened for both "
+"reading and writing (B<O_RDWR>) and B<O_LARGEFILE> is set for the "
+"descriptor."
+msgstr ""
+
+#. type: Plain text
+#: build/C/man2/memfd_create.2:126
+msgid ""
+"With respect to B<fork>(2) and B<execve>(2), the usual semantics apply for "
+"the file descriptor created by B<memfd_create>(). A copy of the file "
+"descriptor is inherited by the child produced by B<fork>(2) and refers to "
+"the same file. The file descriptor is preserved across B<execve>(2), unless "
+"the close-on-exec flag has been set."
+msgstr ""
+
+#. type: Plain text
+#: build/C/man2/memfd_create.2:133
+msgid ""
+"On success, B<memfd_create>() returns a new file descriptor. On error, -1 "
+"is returned and I<errno> is set to indicate the error."
+msgstr ""
+
+#. type: Plain text
+#: build/C/man2/memfd_create.2:139
+msgid "The address in I<name> points to invalid memory."
+msgstr ""
+
+#. type: Plain text
+#: build/C/man2/memfd_create.2:146
+msgid ""
+"An unsupported value was specified in one of the arguments: I<flags> "
+"included unknown bits, or I<name> was too long."
+msgstr ""
+
+#. type: Plain text
+#: build/C/man2/memfd_create.2:149
+msgid "The per-process limit on open file descriptors has been reached."
+msgstr ""
+
+#. type: Plain text
+#: build/C/man2/memfd_create.2:152
+msgid "The system-wide limit on the total number of open files has been reached."
+msgstr ""
+
+#. type: Plain text
+#: build/C/man2/memfd_create.2:155
+msgid "There was insufficient memory to create a new anonymous file."
+msgstr ""
+
+#. FIXME . When glibc support appears, update the following sentence:
+#. type: Plain text
+#: build/C/man2/memfd_create.2:161
+msgid ""
+"The B<memfd_create>() system call first appeared in Linux 3.17. Support in "
+"the GNU C library is pending."
+msgstr ""
+
+#. type: Plain text
+#: build/C/man2/memfd_create.2:165
+msgid "The B<memfd_create>() system call is Linux-specific."
+msgstr ""
+
+#. See also http://lwn.net/Articles/593918/
+#. and http://lwn.net/Articles/594919/ and http://lwn.net/Articles/591108/
+#. type: Plain text
+#: build/C/man2/memfd_create.2:178
+msgid ""
+"The B<memfd_create>() system call provides a simple alternative to manually "
+"mounting a I<tmpfs> filesystem and creating and opening a file in that "
+"filesystem. The primary purpose of B<memfd_create>() is to create files "
+"and associated file descriptors that are used with the file-sealing APIs "
+"provided by B<fcntl>(2)."
+msgstr ""
+
+#. type: Plain text
+#: build/C/man2/memfd_create.2:192
+msgid ""
+"The B<memfd_create>() system call also has uses without file sealing (which "
+"is why file-sealing is disabled, unless explicitly requested with the "
+"B<MFD_ALLOW_SEALING> flag). In particular, it can be used as an alternative "
+"to creating files in I<tmp> or as an alternative to using the B<open>(2) "
+"B<O_TMPFILE> in cases where there is no intention to actually link the "
+"resulting file into the filesystem."
+msgstr ""
+
+#. type: SS
+#: build/C/man2/memfd_create.2:192
+#, no-wrap
+msgid "File sealing"
+msgstr ""
+
+#. type: Plain text
+#: build/C/man2/memfd_create.2:210
+msgid ""
+"In the absence of file sealing, processes that communicate via shared memory "
+"must either trust each other, or take measures to deal with the possibility "
+"that an untrusted peer may manipulate the shared memory region in "
+"problematic ways. For example, an untrusted peer might modify the contents "
+"of the shared memory at any time, or shrink the shared memory region. The "
+"former possibility leaves the local process vulnerable to "
+"time-of-check-to-time-of-use race conditions (typically dealt with by "
+"copying data from the shared memory region before checking and using it). "
+"The latter possibility leaves the local process vulnerable to B<SIGBUS> "
+"signals when an attempt is made to access a now-nonexistent location in the "
+"shared memory region. (Dealing with this possibility necessitates the use "
+"of a handler for the B<SIGBUS> signal.)"
+msgstr ""
+
+#. type: Plain text
+#: build/C/man2/memfd_create.2:216
+msgid ""
+"Dealing with untrusted peers imposes extra complexity on code that employs "
+"shared memory. Memory sealing enables that extra complexity to be "
+"eliminated, by allowing a process to operate secure in the knowledge that "
+"its peer can't modify the shared memory in an undesired fashion."
+msgstr ""
+
+#. type: Plain text
+#: build/C/man2/memfd_create.2:218
+msgid "An example of the usage of the sealing mechanism is as follows:"
+msgstr ""
+
+#. type: Plain text
+#: build/C/man2/memfd_create.2:225
+msgid ""
+"The first process creates a I<tmpfs> file using B<memfd_create>(). The call "
+"yields a file descriptor used in subsequent steps."
+msgstr ""
+
+#. type: Plain text
+#: build/C/man2/memfd_create.2:232
+msgid ""
+"The first process sizes the file created in the previous step using "
+"B<ftruncate>(2), maps it using B<mmap>(2), and populates the shared memory "
+"with the desired data."
+msgstr ""
+
+#. type: IP
+#: build/C/man2/memfd_create.2:232
+#, no-wrap
+msgid "3."
+msgstr ""
+
+#. type: Plain text
+#: build/C/man2/memfd_create.2:242
+msgid ""
+"The first process uses the B<fcntl>(2) B<F_ADD_SEALS> operation to place "
+"one or more seals on the file, in order to restrict further modifications on "
+"the file. (If placing the seal B<F_SEAL_WRITE>, then it will be necessary "
+"to first unmap the shared writable mapping created in the previous step.)"
+msgstr ""
+
+#. type: IP
+#: build/C/man2/memfd_create.2:242
+#, no-wrap
+msgid "4."
+msgstr ""
+
+#. type: Plain text
+#: build/C/man2/memfd_create.2:247
+msgid ""
+"A second process obtains a file descriptor for the I<tmpfs> file and maps "
+"it. Among the possible ways in which this could happen are the following:"
+msgstr ""
+
+#. type: Plain text
+#: build/C/man2/memfd_create.2:258
+msgid ""
+"The process that called B<memfd_create>() could transfer the resulting file "
+"descriptor to the second process via a UNIX domain socket (see B<unix>(7) "
+"and B<cmsg>(3)). The second process then maps the file using B<mmap>(2)."
+msgstr ""
+
+#. type: Plain text
+#: build/C/man2/memfd_create.2:266
+msgid ""
+"The second process is created via B<fork>(2) and thus automatically "
+"inherits the file descriptor and mapping. (Note that in this case and the "
+"next, there is a natural trust relationship between the two processes, since "
+"they are running under the same user ID. Therefore, file sealing would not "
+"normally be necessary.)"
+msgstr ""
+
+#. type: Plain text
+#: build/C/man2/memfd_create.2:280
+msgid ""
+"The second process opens the file I</proc/E<lt>pdE<gt>/fd/E<lt>fdE<gt>>, "
+"where I<E<lt>pidE<gt>> is the PID of the first process (the one that called "
+"B<memfd_create>()), and I<E<lt>fdE<gt>> is the number of the file descriptor "
+"returned by the call to B<memfd_create>() in that process. The second "
+"process then maps the file using B<mmap>(2)."
+msgstr ""
+
+#. type: IP
+#: build/C/man2/memfd_create.2:281
+#, no-wrap
+msgid "5."
+msgstr ""
+
+#. type: Plain text
+#: build/C/man2/memfd_create.2:293
+msgid ""
+"The second process uses the B<fcntl>(2) B<F_GET_SEALS> operation to "
+"retrieve the bit mask of seals that has been applied to the file. This bit "
+"mask can be inspected in order to determine what kinds of restrictions have "
+"been placed on file modifications. If desired, the second process can apply "
+"further seals to impose additional restrictions (so long as the "
+"B<F_SEAL_SEAL> seal has not yet been applied)."
+msgstr ""
+
+#. type: Plain text
+#: build/C/man2/memfd_create.2:297
+msgid ""
+"Below are shown two example programs that demonstrate the use of "
+"B<memfd_create>() and the file sealing API."
+msgstr ""
+
+#. type: Plain text
+#: build/C/man2/memfd_create.2:312
+msgid ""
+"The first program, I<t_memfd_create.c>, creates a I<tmpfs> file using "
+"B<memfd_create>(), sets a size for the file, maps it into memory, and "
+"optionally places some seals on the file. The program accepts up to three "
+"command-line arguments, of which the first two are required. The first "
+"argument is the name to associate with the file, the second argument is the "
+"size to be set for the file, and the optional third is a string of "
+"characters that specify seals to be set on file."
+msgstr ""
+
+#. type: Plain text
+#: build/C/man2/memfd_create.2:318
+msgid ""
+"The second program, I<t_get_seals.c>, can be used to open an existing file "
+"that was created via B<memfd_create>() and inspect the set of seals that "
+"have been applied to that file."
+msgstr ""
+
+#. type: Plain text
+#: build/C/man2/memfd_create.2:323
+msgid ""
+"The following shell session demonstrates the use of these programs. First "
+"we create a I<tmpfs> file and set some seals on it:"
+msgstr ""
+
+#. type: Plain text
+#: build/C/man2/memfd_create.2:329
+#, no-wrap
+msgid ""
+"$ B<./t_memfd_create my_memfd_file 4096 sw &>\n"
+"[1] 11775\n"
+"PID: 11775; fd: 3; /proc/11775/fd/3\n"
+msgstr ""
+
+#. type: Plain text
+#: build/C/man2/memfd_create.2:347
+msgid ""
+"At this point, the I<t_memfd_create> program continues to run in the "
+"background. From another program, we can obtain a file descriptor for the "
+"file created by B<memfd_create>() by opening the I</proc/PID/fd> file that "
+"corresponds to the descriptor opened by B<memfd_create>(). Using that "
+"pathname, we inspect the content of the I</proc/PID/fd> symbolic link, and "
+"use our I<t_get_seals> program to view the seals that have been placed on "
+"the file:"
+msgstr ""
+
+#. type: Plain text
+#: build/C/man2/memfd_create.2:354
+#, no-wrap
+msgid ""
+"$ B<readlink /proc/11775/fd/3>\n"
+"/memfd:my_memfd_file (deleted)\n"
+"$ B<./t_get_seals /proc/11775/fd/3>\n"
+"Existing seals: WRITE SHRINK\n"
+msgstr ""
+
+#. type: SS
+#: build/C/man2/memfd_create.2:356
+#, no-wrap
+msgid "Program source: t_memfd_create.c"
+msgstr ""
+
+#. type: Plain text
+#: build/C/man2/memfd_create.2:365
+#, no-wrap
+msgid ""
+"#include E<lt>sys/memfd.hE<gt>\n"
+"#include E<lt>fcntl.hE<gt>\n"
+"#include E<lt>stdlib.hE<gt>\n"
+"#include E<lt>unistd.hE<gt>\n"
+"#include E<lt>string.hE<gt>\n"
+"#include E<lt>stdio.hE<gt>\n"
+msgstr ""
+
+#. type: Plain text
+#: build/C/man2/memfd_create.2:377
+#, no-wrap
+msgid ""
+"int\n"
+"main(int argc, char *argv[])\n"
+"{\n"
+" int fd;\n"
+" unsigned int seals;\n"
+" char *addr;\n"
+" char *name, *seals_arg;\n"
+" ssize_t len;\n"
+msgstr ""
+
+#. type: Plain text
+#: build/C/man2/memfd_create.2:388
+#, no-wrap
+msgid ""
+" if (argc E<lt> 3) {\n"
+" fprintf(stderr, \"%s name size [seals]\\en\", argv[0]);\n"
+" fprintf(stderr, \"\\et\\(aqseals\\(aq can contain any of the \"\n"
+" \"following characters:\\en\");\n"
+" fprintf(stderr, \"\\et\\etg - F_SEAL_GROW\\en\");\n"
+" fprintf(stderr, \"\\et\\ets - F_SEAL_SHRINK\\en\");\n"
+" fprintf(stderr, \"\\et\\etw - F_SEAL_WRITE\\en\");\n"
+" fprintf(stderr, \"\\et\\etS - F_SEAL_SEAL\\en\");\n"
+" exit(EXIT_FAILURE);\n"
+" }\n"
+msgstr ""
+
+#. type: Plain text
+#: build/C/man2/memfd_create.2:392
+#, no-wrap
+msgid ""
+" name = argv[1];\n"
+" len = atoi(argv[2]);\n"
+" seals_arg = argv[3];\n"
+msgstr ""
+
+#. type: Plain text
+#: build/C/man2/memfd_create.2:395
+#, no-wrap
+msgid ""
+" /* Create an anonymous file in tmpfs; allow seals to be\n"
+" placed on the file */\n"
+msgstr ""
+
+#. type: Plain text
+#: build/C/man2/memfd_create.2:399
+#, no-wrap
+msgid ""
+" fd = memfd_create(name, MFD_ALLOW_SEALING);\n"
+" if (fd == -1)\n"
+" errExit(\"memfd_create\");\n"
+msgstr ""
+
+#. type: Plain text
+#: build/C/man2/memfd_create.2:401
+#, no-wrap
+msgid " /* Size the file as specified on the command line */\n"
+msgstr ""
+
+#. type: Plain text
+#: build/C/man2/memfd_create.2:404
+#, no-wrap
+msgid ""
+" if (ftruncate(fd, len) == -1)\n"
+" errExit(\"truncate\");\n"
+msgstr ""
+
+#. type: Plain text
+#: build/C/man2/memfd_create.2:407
+#, no-wrap
+msgid ""
+" printf(\"PID: %ld; fd: %d; /proc/%ld/fd/%d\\en\",\n"
+" (long) getpid(), fd, (long) getpid(), fd);\n"
+msgstr ""
+
+#. type: Plain text
+#: build/C/man2/memfd_create.2:410
+#, no-wrap
+msgid ""
+" /* Code to map the file and populate the mapping with data\n"
+" omitted */\n"
+msgstr ""
+
+#. type: Plain text
+#: build/C/man2/memfd_create.2:413
+#, no-wrap
+msgid ""
+" /* If a \\(aqseals\\(aq command-line argument was supplied, set some\n"
+" seals on the file */\n"
+msgstr ""
+
+#. type: Plain text
+#: build/C/man2/memfd_create.2:416
+#, no-wrap
+msgid ""
+" if (seals_arg != NULL) {\n"
+" seals = 0;\n"
+msgstr ""
+
+#. type: Plain text
+#: build/C/man2/memfd_create.2:425
+#, no-wrap
+msgid ""
+" if (strchr(seals_arg, \\(aqg\\(aq) != NULL)\n"
+" seals |= F_SEAL_GROW;\n"
+" if (strchr(seals_arg, \\(aqs\\(aq) != NULL)\n"
+" seals |= F_SEAL_SHRINK;\n"
+" if (strchr(seals_arg, \\(aqw\\(aq) != NULL)\n"
+" seals |= F_SEAL_WRITE;\n"
+" if (strchr(seals_arg, \\(aqS\\(aq) != NULL)\n"
+" seals |= F_SEAL_SEAL;\n"
+msgstr ""
+
+#. type: Plain text
+#: build/C/man2/memfd_create.2:429
+#, no-wrap
+msgid ""
+" if (fcntl(fd, F_ADD_SEALS, seals) == -1)\n"
+" errExit(\"fcntl\");\n"
+" }\n"
+msgstr ""
+
+#. type: Plain text
+#: build/C/man2/memfd_create.2:432
+#, no-wrap
+msgid ""
+" /* Keep running, so that the file created by memfd_create()\n"
+" continues to exist */\n"
+msgstr ""
+
+#. type: Plain text
+#: build/C/man2/memfd_create.2:434
+#, no-wrap
+msgid " pause();\n"
+msgstr ""
+
+#. type: SS
+#: build/C/man2/memfd_create.2:438
+#, no-wrap
+msgid "Program source: t_get_seals.c"
+msgstr ""
+
+#. type: Plain text
+#: build/C/man2/memfd_create.2:447
+#, no-wrap
+msgid ""
+"#include E<lt>sys/memfd.hE<gt>\n"
+"#include E<lt>fcntl.hE<gt>\n"
+"#include E<lt>unistd.hE<gt>\n"
+"#include E<lt>stdlib.hE<gt>\n"
+"#include E<lt>string.hE<gt>\n"
+"#include E<lt>stdio.hE<gt>\n"
+msgstr ""
+
+#. type: Plain text
+#: build/C/man2/memfd_create.2:456
+#, no-wrap
+msgid ""
+"int\n"
+"main(int argc, char *argv[])\n"
+"{\n"
+" int fd;\n"
+" unsigned int seals;\n"
+msgstr ""
+
+#. type: Plain text
+#: build/C/man2/memfd_create.2:461
+#, no-wrap
+msgid ""
+" if (argc != 2) {\n"
+" fprintf(stderr, \"%s /proc/PID/fd/FD\\en\", argv[0]);\n"
+" exit(EXIT_FAILURE);\n"
+" }\n"
+msgstr ""
+
+#. type: Plain text
+#: build/C/man2/memfd_create.2:465
+#, no-wrap
+msgid ""
+" fd = open(argv[1], O_RDWR);\n"
+" if (fd == -1)\n"
+" errExit(\"open\");\n"
+msgstr ""
+
+#. type: Plain text
+#: build/C/man2/memfd_create.2:469
+#, no-wrap
+msgid ""
+" seals = fcntl(fd, F_GET_SEALS);\n"
+" if (seals == -1)\n"
+" errExit(\"fcntl\");\n"
+msgstr ""
+
+#. type: Plain text
+#: build/C/man2/memfd_create.2:480
+#, no-wrap
+msgid ""
+" printf(\"Existing seals:\");\n"
+" if (seals & F_SEAL_SEAL)\n"
+" printf(\" SEAL\");\n"
+" if (seals & F_SEAL_GROW)\n"
+" printf(\" GROW\");\n"
+" if (seals & F_SEAL_WRITE)\n"
+" printf(\" WRITE\");\n"
+" if (seals & F_SEAL_SHRINK)\n"
+" printf(\" SHRINK\");\n"
+" printf(\"\\en\");\n"
+msgstr ""
+
+#. type: Plain text
+#: build/C/man2/memfd_create.2:483
+#, no-wrap
+msgid ""
+" /* Code to map the file and access the contents of the\n"
+" resulting mapping omitted */\n"
+msgstr ""
+
+#. type: Plain text
+#: build/C/man2/memfd_create.2:493
+msgid "B<fcntl>(2), B<ftruncate>(2), B<mmap>(2), B<shmget>(2), B<shm_open>(3)"
+msgstr ""
+
+#. type: TH
+#: build/C/man2/s390_pci_mmio_write.2:25
+#, no-wrap
+msgid "S390_PCI_MMIO_WRITE"
+msgstr ""
+
+#. type: TH
+#: build/C/man2/s390_pci_mmio_write.2:25
+#, no-wrap
+msgid "2015-01-15"
+msgstr ""
+
+#. type: Plain text
+#: build/C/man2/s390_pci_mmio_write.2:29
+msgid ""
+"s390_pci_mmio_write, s390_pci_mmio_read - transfer data to/from PCI MMIO "
+"memory page"
+msgstr ""
+
+#. type: Plain text
+#: build/C/man2/s390_pci_mmio_write.2:32
+#, no-wrap
+msgid "B<#include E<lt>asm/unistd.hE<gt>>\n"
+msgstr ""
+
+#. type: Plain text
+#: build/C/man2/s390_pci_mmio_write.2:35
+#, no-wrap
+msgid ""
+"B<int s390_pci_mmio_write(unsigned long >I<mmio_addr>B<,>\n"
+"B< void *>I<user_buffer>B<, size_t >I<length>B<);>\n"
+msgstr ""
+
+#. type: Plain text
+#: build/C/man2/s390_pci_mmio_write.2:38
+#, no-wrap
+msgid ""
+"B<int s390_pci_mmio_read(unsigned long >I<mmio_addr>B<,>\n"
+"B< void *>I<user_buffer>B<, size_t >I<length>B<);>\n"
+msgstr ""
+
+#. type: Plain text
+#: build/C/man2/s390_pci_mmio_write.2:57
+msgid ""
+"The B<s390_pci_mmio_write>() system call writes I<length> bytes of data "
+"from the user-space buffer I<user_buffer> to the PCI MMIO memory location "
+"specified by I<mmio_addr>. The B<s390_pci_mmio_read>() system call reads "
+"I<length> bytes of data from the PCI MMIO memory location specified by "
+"I<mmio_addr> to the user-space buffer I<user_buffer>."
+msgstr ""
+
+#. type: Plain text
+#: build/C/man2/s390_pci_mmio_write.2:68
+msgid ""
+"These system calls must be used instead of the simple assignment or "
+"data-transfer operations that are used to access the PCI MMIO memory areas "
+"mapped to user space on the Linux System z platform. The address specified "
+"by I<mmio_addr> must belong to a PCI MMIO memory page mapping in the "
+"caller's address space, and the data being written or read must not cross a "
+"page boundary. The I<length> value cannot be greater than the system page "
+"size."
+msgstr ""
+
+#. type: Plain text
+#: build/C/man2/s390_pci_mmio_write.2:77
+msgid ""
+"On success, B<s390_pci_mmio_write>() and B<s390_pci_mmio_read>() return "
+"0. On error, -1 is returned and I<errno> is set to one of the error codes "
+"listed below."
+msgstr ""
+
+#. type: Plain text
+#: build/C/man2/s390_pci_mmio_write.2:83
+msgid "The address in I<mmio_addr> is invalid."
+msgstr ""
+
+#. type: Plain text
+#: build/C/man2/s390_pci_mmio_write.2:87
+msgid ""
+"I<user_buffer> does not point to a valid location in the caller's address "
+"space."
+msgstr ""
+
+#. type: Plain text
+#: build/C/man2/s390_pci_mmio_write.2:92
+msgid "Invalid I<length> argument."
+msgstr ""
+
+#. type: Plain text
+#: build/C/man2/s390_pci_mmio_write.2:95
+msgid "PCI support is not enabled."
+msgstr ""
+
+#. type: Plain text
+#: build/C/man2/s390_pci_mmio_write.2:98
+msgid "Insufficient memory."
+msgstr ""
+
+#. type: Plain text
+#: build/C/man2/s390_pci_mmio_write.2:100
+msgid "These system calls are available since Linux 3.19."
+msgstr ""
+
+#. type: Plain text
+#: build/C/man2/s390_pci_mmio_write.2:103
+msgid ""
+"This Linux-specific system call is available only on the s390 architecture. "
+"The required PCI support is available beginning with System z EC12."
+msgstr ""
+
+#. type: Plain text
+#: build/C/man2/s390_pci_mmio_write.2:107
+msgid ""
+"Glibc does not provide a wrapper for this system call, use B<syscall>(2) to "
+"call it."
+msgstr ""
+
+#. type: Plain text
+#: build/C/man2/s390_pci_mmio_write.2:109
+msgid "B<syscall>(2)"
+msgstr ""