]> git.ipfire.org Git - thirdparty/man-pages.git/blob - man2/remap_file_pages.2
Change name of 'start' argument to 'addr' for consistency with:
[thirdparty/man-pages.git] / man2 / remap_file_pages.2
1 .\" Copyright (C) 2003, Michael Kerrisk (mtk.manpages@gmail.com)
2 .\"
3 .\" Permission is granted to make and distribute verbatim copies of this
4 .\" manual provided the copyright notice and this permission notice are
5 .\" preserved on all copies.
6 .\"
7 .\" Permission is granted to copy and distribute modified versions of this
8 .\" manual under the conditions for verbatim copying, provided that the
9 .\" entire resulting derived work is distributed under the terms of a
10 .\" permission notice identical to this one.
11 .\"
12 .\" Since the Linux kernel and libraries are constantly changing, this
13 .\" manual page may be incorrect or out-of-date. The author(s) assume no
14 .\" responsibility for errors or omissions, or for damages resulting from
15 .\" the use of the information contained herein. The author(s) may not
16 .\" have taken the same level of care in the production of this manual,
17 .\" which is licensed free of charge, as they might when working
18 .\" professionally.
19 .\"
20 .\" Formatted or processed versions of this manual, if unaccompanied by
21 .\" the source, must acknowledge the copyright and authors of this work.
22 .\"
23 .\" 2003-12-10 Initial creation, Michael Kerrisk <mtk.manpages@gmail.com>
24 .\" 2004-10-28 aeb, corrected prototype, prot must be 0
25 .\"
26 .TH REMAP_FILE_PAGES 2 2008-04-22 "Linux" "Linux Programmer's Manual"
27 .SH NAME
28 remap_file_pages \- create a non-linear file mapping
29 .SH SYNOPSIS
30 .nf
31 .B #define _GNU_SOURCE
32 .B #include <sys/mman.h>
33 .sp
34 .BI "int remap_file_pages(void *" addr ", size_t " size ", int " prot ,
35 .BI " ssize_t " pgoff ", int " flags );
36 .fi
37 .SH DESCRIPTION
38 The
39 .BR remap_file_pages ()
40 system call is used to create a non-linear mapping, that is, a mapping
41 in which the pages of the file are mapped into a non-sequential order
42 in memory.
43 The advantage of using
44 .BR remap_file_pages ()
45 over using repeated calls to
46 .BR mmap (2)
47 is that the former approach does not require the kernel to create
48 additional VMA (Virtual Memory Area) data structures.
49
50 To create a non-linear mapping we perform the following steps:
51 .TP 3
52 1.
53 Use
54 .BR mmap (2)
55 to create a mapping (which is initially linear).
56 This mapping must be created with the
57 .B MAP_SHARED
58 flag.
59 .TP
60 2.
61 Use one or more calls to
62 .BR remap_file_pages ()
63 to rearrange the correspondence between the pages of the mapping
64 and the pages of the file.
65 It is possible to map the same page of a file
66 into multiple locations within the mapped region.
67 .LP
68 The
69 .I pgoff
70 and
71 .I size
72 arguments specify the region of the file that is to be relocated
73 within the mapping:
74 .I pgoff
75 is a file offset in units of the system page size;
76 .I size
77 is the length of the region in bytes.
78
79 The
80 .I addr
81 argument serves two purposes.
82 First, it identifies the mapping whose pages we want to rearrange.
83 Thus,
84 .I addr
85 must be an address that falls within
86 a region previously mapped by a call to
87 .BR mmap (2).
88 Second,
89 .I addr
90 specifies the address at which the file pages
91 identified by
92 .I pgoff
93 and
94 .I size
95 will be placed.
96
97 The values specified in
98 .I addr
99 and
100 .I size
101 should be multiples of the system page size.
102 If they are not, then the kernel rounds
103 .I both
104 values
105 .I down
106 to the nearest multiple of the page size.
107 .\" This rounding is weird, and not consistent with the treatment of
108 .\" the analogous arguments for munmap()/mprotect() and for mlock().
109 .\" MTK, 14 Sep 2005
110
111 The
112 .I prot
113 argument must be specified as 0.
114
115 The
116 .I flags
117 argument has the same meaning as for
118 .BR mmap (2),
119 but all flags other than
120 .B MAP_NONBLOCK
121 are ignored.
122 .SH "RETURN VALUE"
123 On success,
124 .BR remap_file_pages ()
125 returns 0.
126 On error, \-1 is returned, and
127 .I errno
128 is set appropriately.
129 .SH ERRORS
130 .TP
131 .B EINVAL
132 .I addr
133 does not refer to a valid mapping
134 created with the
135 .B MAP_SHARED
136 flag.
137 .TP
138 .B EINVAL
139 .IR addr ,
140 .IR size ,
141 .IR prot ,
142 or
143 .I pgoff
144 is invalid.
145 .\" And possibly others from vma->vm_ops->populate()
146 .SH VERSIONS
147 The
148 .BR remap_file_pages ()
149 system call appeared in Linux 2.5.46;
150 glibc support was added in version 2.3.3.
151 .SH "CONFORMING TO"
152 The
153 .BR remap_file_pages ()
154 system call is Linux-specific.
155 .SH "SEE ALSO"
156 .BR getpagesize (2),
157 .BR mmap (2),
158 .BR mmap2 (2),
159 .BR mprotect (2),
160 .BR mremap (2),
161 .BR msync (2),
162 .BR feature_test_macros (7)