Branch data Line data Source code
1 : : /* SPDX-License-Identifier: GPL-2.0 */
2 : : #ifndef __LINUX_GFP_H
3 : : #define __LINUX_GFP_H
4 : :
5 : : #include <linux/mmdebug.h>
6 : : #include <linux/mmzone.h>
7 : : #include <linux/stddef.h>
8 : : #include <linux/linkage.h>
9 : : #include <linux/topology.h>
10 : :
11 : : struct vm_area_struct;
12 : :
13 : : /*
14 : : * In case of changes, please don't forget to update
15 : : * include/trace/events/mmflags.h and tools/perf/builtin-kmem.c
16 : : */
17 : :
18 : : /* Plain integer GFP bitmasks. Do not use this directly. */
19 : : #define ___GFP_DMA 0x01u
20 : : #define ___GFP_HIGHMEM 0x02u
21 : : #define ___GFP_DMA32 0x04u
22 : : #define ___GFP_MOVABLE 0x08u
23 : : #define ___GFP_RECLAIMABLE 0x10u
24 : : #define ___GFP_HIGH 0x20u
25 : : #define ___GFP_IO 0x40u
26 : : #define ___GFP_FS 0x80u
27 : : #define ___GFP_ZERO 0x100u
28 : : #define ___GFP_ATOMIC 0x200u
29 : : #define ___GFP_DIRECT_RECLAIM 0x400u
30 : : #define ___GFP_KSWAPD_RECLAIM 0x800u
31 : : #define ___GFP_WRITE 0x1000u
32 : : #define ___GFP_NOWARN 0x2000u
33 : : #define ___GFP_RETRY_MAYFAIL 0x4000u
34 : : #define ___GFP_NOFAIL 0x8000u
35 : : #define ___GFP_NORETRY 0x10000u
36 : : #define ___GFP_MEMALLOC 0x20000u
37 : : #define ___GFP_COMP 0x40000u
38 : : #define ___GFP_NOMEMALLOC 0x80000u
39 : : #define ___GFP_HARDWALL 0x100000u
40 : : #define ___GFP_THISNODE 0x200000u
41 : : #define ___GFP_ACCOUNT 0x400000u
42 : : #ifdef CONFIG_LOCKDEP
43 : : #define ___GFP_NOLOCKDEP 0x800000u
44 : : #else
45 : : #define ___GFP_NOLOCKDEP 0
46 : : #endif
47 : : /* If the above are modified, __GFP_BITS_SHIFT may need updating */
48 : :
49 : : /*
50 : : * Physical address zone modifiers (see linux/mmzone.h - low four bits)
51 : : *
52 : : * Do not put any conditional on these. If necessary modify the definitions
53 : : * without the underscores and use them consistently. The definitions here may
54 : : * be used in bit comparisons.
55 : : */
56 : : #define __GFP_DMA ((__force gfp_t)___GFP_DMA)
57 : : #define __GFP_HIGHMEM ((__force gfp_t)___GFP_HIGHMEM)
58 : : #define __GFP_DMA32 ((__force gfp_t)___GFP_DMA32)
59 : : #define __GFP_MOVABLE ((__force gfp_t)___GFP_MOVABLE) /* ZONE_MOVABLE allowed */
60 : : #define GFP_ZONEMASK (__GFP_DMA|__GFP_HIGHMEM|__GFP_DMA32|__GFP_MOVABLE)
61 : :
62 : : /**
63 : : * DOC: Page mobility and placement hints
64 : : *
65 : : * Page mobility and placement hints
66 : : * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
67 : : *
68 : : * These flags provide hints about how mobile the page is. Pages with similar
69 : : * mobility are placed within the same pageblocks to minimise problems due
70 : : * to external fragmentation.
71 : : *
72 : : * %__GFP_MOVABLE (also a zone modifier) indicates that the page can be
73 : : * moved by page migration during memory compaction or can be reclaimed.
74 : : *
75 : : * %__GFP_RECLAIMABLE is used for slab allocations that specify
76 : : * SLAB_RECLAIM_ACCOUNT and whose pages can be freed via shrinkers.
77 : : *
78 : : * %__GFP_WRITE indicates the caller intends to dirty the page. Where possible,
79 : : * these pages will be spread between local zones to avoid all the dirty
80 : : * pages being in one zone (fair zone allocation policy).
81 : : *
82 : : * %__GFP_HARDWALL enforces the cpuset memory allocation policy.
83 : : *
84 : : * %__GFP_THISNODE forces the allocation to be satisfied from the requested
85 : : * node with no fallbacks or placement policy enforcements.
86 : : *
87 : : * %__GFP_ACCOUNT causes the allocation to be accounted to kmemcg.
88 : : */
89 : : #define __GFP_RECLAIMABLE ((__force gfp_t)___GFP_RECLAIMABLE)
90 : : #define __GFP_WRITE ((__force gfp_t)___GFP_WRITE)
91 : : #define __GFP_HARDWALL ((__force gfp_t)___GFP_HARDWALL)
92 : : #define __GFP_THISNODE ((__force gfp_t)___GFP_THISNODE)
93 : : #define __GFP_ACCOUNT ((__force gfp_t)___GFP_ACCOUNT)
94 : :
95 : : /**
96 : : * DOC: Watermark modifiers
97 : : *
98 : : * Watermark modifiers -- controls access to emergency reserves
99 : : * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
100 : : *
101 : : * %__GFP_HIGH indicates that the caller is high-priority and that granting
102 : : * the request is necessary before the system can make forward progress.
103 : : * For example, creating an IO context to clean pages.
104 : : *
105 : : * %__GFP_ATOMIC indicates that the caller cannot reclaim or sleep and is
106 : : * high priority. Users are typically interrupt handlers. This may be
107 : : * used in conjunction with %__GFP_HIGH
108 : : *
109 : : * %__GFP_MEMALLOC allows access to all memory. This should only be used when
110 : : * the caller guarantees the allocation will allow more memory to be freed
111 : : * very shortly e.g. process exiting or swapping. Users either should
112 : : * be the MM or co-ordinating closely with the VM (e.g. swap over NFS).
113 : : *
114 : : * %__GFP_NOMEMALLOC is used to explicitly forbid access to emergency reserves.
115 : : * This takes precedence over the %__GFP_MEMALLOC flag if both are set.
116 : : */
117 : : #define __GFP_ATOMIC ((__force gfp_t)___GFP_ATOMIC)
118 : : #define __GFP_HIGH ((__force gfp_t)___GFP_HIGH)
119 : : #define __GFP_MEMALLOC ((__force gfp_t)___GFP_MEMALLOC)
120 : : #define __GFP_NOMEMALLOC ((__force gfp_t)___GFP_NOMEMALLOC)
121 : :
122 : : /**
123 : : * DOC: Reclaim modifiers
124 : : *
125 : : * Reclaim modifiers
126 : : * ~~~~~~~~~~~~~~~~~
127 : : *
128 : : * %__GFP_IO can start physical IO.
129 : : *
130 : : * %__GFP_FS can call down to the low-level FS. Clearing the flag avoids the
131 : : * allocator recursing into the filesystem which might already be holding
132 : : * locks.
133 : : *
134 : : * %__GFP_DIRECT_RECLAIM indicates that the caller may enter direct reclaim.
135 : : * This flag can be cleared to avoid unnecessary delays when a fallback
136 : : * option is available.
137 : : *
138 : : * %__GFP_KSWAPD_RECLAIM indicates that the caller wants to wake kswapd when
139 : : * the low watermark is reached and have it reclaim pages until the high
140 : : * watermark is reached. A caller may wish to clear this flag when fallback
141 : : * options are available and the reclaim is likely to disrupt the system. The
142 : : * canonical example is THP allocation where a fallback is cheap but
143 : : * reclaim/compaction may cause indirect stalls.
144 : : *
145 : : * %__GFP_RECLAIM is shorthand to allow/forbid both direct and kswapd reclaim.
146 : : *
147 : : * The default allocator behavior depends on the request size. We have a concept
148 : : * of so called costly allocations (with order > %PAGE_ALLOC_COSTLY_ORDER).
149 : : * !costly allocations are too essential to fail so they are implicitly
150 : : * non-failing by default (with some exceptions like OOM victims might fail so
151 : : * the caller still has to check for failures) while costly requests try to be
152 : : * not disruptive and back off even without invoking the OOM killer.
153 : : * The following three modifiers might be used to override some of these
154 : : * implicit rules
155 : : *
156 : : * %__GFP_NORETRY: The VM implementation will try only very lightweight
157 : : * memory direct reclaim to get some memory under memory pressure (thus
158 : : * it can sleep). It will avoid disruptive actions like OOM killer. The
159 : : * caller must handle the failure which is quite likely to happen under
160 : : * heavy memory pressure. The flag is suitable when failure can easily be
161 : : * handled at small cost, such as reduced throughput
162 : : *
163 : : * %__GFP_RETRY_MAYFAIL: The VM implementation will retry memory reclaim
164 : : * procedures that have previously failed if there is some indication
165 : : * that progress has been made else where. It can wait for other
166 : : * tasks to attempt high level approaches to freeing memory such as
167 : : * compaction (which removes fragmentation) and page-out.
168 : : * There is still a definite limit to the number of retries, but it is
169 : : * a larger limit than with %__GFP_NORETRY.
170 : : * Allocations with this flag may fail, but only when there is
171 : : * genuinely little unused memory. While these allocations do not
172 : : * directly trigger the OOM killer, their failure indicates that
173 : : * the system is likely to need to use the OOM killer soon. The
174 : : * caller must handle failure, but can reasonably do so by failing
175 : : * a higher-level request, or completing it only in a much less
176 : : * efficient manner.
177 : : * If the allocation does fail, and the caller is in a position to
178 : : * free some non-essential memory, doing so could benefit the system
179 : : * as a whole.
180 : : *
181 : : * %__GFP_NOFAIL: The VM implementation _must_ retry infinitely: the caller
182 : : * cannot handle allocation failures. The allocation could block
183 : : * indefinitely but will never return with failure. Testing for
184 : : * failure is pointless.
185 : : * New users should be evaluated carefully (and the flag should be
186 : : * used only when there is no reasonable failure policy) but it is
187 : : * definitely preferable to use the flag rather than opencode endless
188 : : * loop around allocator.
189 : : * Using this flag for costly allocations is _highly_ discouraged.
190 : : */
191 : : #define __GFP_IO ((__force gfp_t)___GFP_IO)
192 : : #define __GFP_FS ((__force gfp_t)___GFP_FS)
193 : : #define __GFP_DIRECT_RECLAIM ((__force gfp_t)___GFP_DIRECT_RECLAIM) /* Caller can reclaim */
194 : : #define __GFP_KSWAPD_RECLAIM ((__force gfp_t)___GFP_KSWAPD_RECLAIM) /* kswapd can wake */
195 : : #define __GFP_RECLAIM ((__force gfp_t)(___GFP_DIRECT_RECLAIM|___GFP_KSWAPD_RECLAIM))
196 : : #define __GFP_RETRY_MAYFAIL ((__force gfp_t)___GFP_RETRY_MAYFAIL)
197 : : #define __GFP_NOFAIL ((__force gfp_t)___GFP_NOFAIL)
198 : : #define __GFP_NORETRY ((__force gfp_t)___GFP_NORETRY)
199 : :
200 : : /**
201 : : * DOC: Action modifiers
202 : : *
203 : : * Action modifiers
204 : : * ~~~~~~~~~~~~~~~~
205 : : *
206 : : * %__GFP_NOWARN suppresses allocation failure reports.
207 : : *
208 : : * %__GFP_COMP address compound page metadata.
209 : : *
210 : : * %__GFP_ZERO returns a zeroed page on success.
211 : : */
212 : : #define __GFP_NOWARN ((__force gfp_t)___GFP_NOWARN)
213 : : #define __GFP_COMP ((__force gfp_t)___GFP_COMP)
214 : : #define __GFP_ZERO ((__force gfp_t)___GFP_ZERO)
215 : :
216 : : /* Disable lockdep for GFP context tracking */
217 : : #define __GFP_NOLOCKDEP ((__force gfp_t)___GFP_NOLOCKDEP)
218 : :
219 : : /* Room for N __GFP_FOO bits */
220 : : #define __GFP_BITS_SHIFT (23 + IS_ENABLED(CONFIG_LOCKDEP))
221 : : #define __GFP_BITS_MASK ((__force gfp_t)((1 << __GFP_BITS_SHIFT) - 1))
222 : :
223 : : /**
224 : : * DOC: Useful GFP flag combinations
225 : : *
226 : : * Useful GFP flag combinations
227 : : * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
228 : : *
229 : : * Useful GFP flag combinations that are commonly used. It is recommended
230 : : * that subsystems start with one of these combinations and then set/clear
231 : : * %__GFP_FOO flags as necessary.
232 : : *
233 : : * %GFP_ATOMIC users can not sleep and need the allocation to succeed. A lower
234 : : * watermark is applied to allow access to "atomic reserves"
235 : : *
236 : : * %GFP_KERNEL is typical for kernel-internal allocations. The caller requires
237 : : * %ZONE_NORMAL or a lower zone for direct access but can direct reclaim.
238 : : *
239 : : * %GFP_KERNEL_ACCOUNT is the same as GFP_KERNEL, except the allocation is
240 : : * accounted to kmemcg.
241 : : *
242 : : * %GFP_NOWAIT is for kernel allocations that should not stall for direct
243 : : * reclaim, start physical IO or use any filesystem callback.
244 : : *
245 : : * %GFP_NOIO will use direct reclaim to discard clean pages or slab pages
246 : : * that do not require the starting of any physical IO.
247 : : * Please try to avoid using this flag directly and instead use
248 : : * memalloc_noio_{save,restore} to mark the whole scope which cannot
249 : : * perform any IO with a short explanation why. All allocation requests
250 : : * will inherit GFP_NOIO implicitly.
251 : : *
252 : : * %GFP_NOFS will use direct reclaim but will not use any filesystem interfaces.
253 : : * Please try to avoid using this flag directly and instead use
254 : : * memalloc_nofs_{save,restore} to mark the whole scope which cannot/shouldn't
255 : : * recurse into the FS layer with a short explanation why. All allocation
256 : : * requests will inherit GFP_NOFS implicitly.
257 : : *
258 : : * %GFP_USER is for userspace allocations that also need to be directly
259 : : * accessibly by the kernel or hardware. It is typically used by hardware
260 : : * for buffers that are mapped to userspace (e.g. graphics) that hardware
261 : : * still must DMA to. cpuset limits are enforced for these allocations.
262 : : *
263 : : * %GFP_DMA exists for historical reasons and should be avoided where possible.
264 : : * The flags indicates that the caller requires that the lowest zone be
265 : : * used (%ZONE_DMA or 16M on x86-64). Ideally, this would be removed but
266 : : * it would require careful auditing as some users really require it and
267 : : * others use the flag to avoid lowmem reserves in %ZONE_DMA and treat the
268 : : * lowest zone as a type of emergency reserve.
269 : : *
270 : : * %GFP_DMA32 is similar to %GFP_DMA except that the caller requires a 32-bit
271 : : * address.
272 : : *
273 : : * %GFP_HIGHUSER is for userspace allocations that may be mapped to userspace,
274 : : * do not need to be directly accessible by the kernel but that cannot
275 : : * move once in use. An example may be a hardware allocation that maps
276 : : * data directly into userspace but has no addressing limitations.
277 : : *
278 : : * %GFP_HIGHUSER_MOVABLE is for userspace allocations that the kernel does not
279 : : * need direct access to but can use kmap() when access is required. They
280 : : * are expected to be movable via page reclaim or page migration. Typically,
281 : : * pages on the LRU would also be allocated with %GFP_HIGHUSER_MOVABLE.
282 : : *
283 : : * %GFP_TRANSHUGE and %GFP_TRANSHUGE_LIGHT are used for THP allocations. They
284 : : * are compound allocations that will generally fail quickly if memory is not
285 : : * available and will not wake kswapd/kcompactd on failure. The _LIGHT
286 : : * version does not attempt reclaim/compaction at all and is by default used
287 : : * in page fault path, while the non-light is used by khugepaged.
288 : : */
289 : : #define GFP_ATOMIC (__GFP_HIGH|__GFP_ATOMIC|__GFP_KSWAPD_RECLAIM)
290 : : #define GFP_KERNEL (__GFP_RECLAIM | __GFP_IO | __GFP_FS)
291 : : #define GFP_KERNEL_ACCOUNT (GFP_KERNEL | __GFP_ACCOUNT)
292 : : #define GFP_NOWAIT (__GFP_KSWAPD_RECLAIM)
293 : : #define GFP_NOIO (__GFP_RECLAIM)
294 : : #define GFP_NOFS (__GFP_RECLAIM | __GFP_IO)
295 : : #define GFP_USER (__GFP_RECLAIM | __GFP_IO | __GFP_FS | __GFP_HARDWALL)
296 : : #define GFP_DMA __GFP_DMA
297 : : #define GFP_DMA32 __GFP_DMA32
298 : : #define GFP_HIGHUSER (GFP_USER | __GFP_HIGHMEM)
299 : : #define GFP_HIGHUSER_MOVABLE (GFP_HIGHUSER | __GFP_MOVABLE)
300 : : #define GFP_TRANSHUGE_LIGHT ((GFP_HIGHUSER_MOVABLE | __GFP_COMP | \
301 : : __GFP_NOMEMALLOC | __GFP_NOWARN) & ~__GFP_RECLAIM)
302 : : #define GFP_TRANSHUGE (GFP_TRANSHUGE_LIGHT | __GFP_DIRECT_RECLAIM)
303 : :
304 : : /* Convert GFP flags to their corresponding migrate type */
305 : : #define GFP_MOVABLE_MASK (__GFP_RECLAIMABLE|__GFP_MOVABLE)
306 : : #define GFP_MOVABLE_SHIFT 3
307 : :
308 : 4000784 : static inline int gfpflags_to_migratetype(const gfp_t gfp_flags)
309 : : {
310 : 4000784 : VM_WARN_ON((gfp_flags & GFP_MOVABLE_MASK) == GFP_MOVABLE_MASK);
311 : 4000784 : BUILD_BUG_ON((1UL << GFP_MOVABLE_SHIFT) != ___GFP_MOVABLE);
312 : 4000784 : BUILD_BUG_ON((___GFP_MOVABLE >> GFP_MOVABLE_SHIFT) != MIGRATE_MOVABLE);
313 : :
314 [ + - ]: 4000784 : if (unlikely(page_group_by_mobility_disabled))
315 : : return MIGRATE_UNMOVABLE;
316 : :
317 : : /* Group based on mobility */
318 : 4000784 : return (gfp_flags & GFP_MOVABLE_MASK) >> GFP_MOVABLE_SHIFT;
319 : : }
320 : : #undef GFP_MOVABLE_MASK
321 : : #undef GFP_MOVABLE_SHIFT
322 : :
323 : 56743208 : static inline bool gfpflags_allow_blocking(const gfp_t gfp_flags)
324 : : {
325 [ + + + + : 56743208 : return !!(gfp_flags & __GFP_DIRECT_RECLAIM);
+ + # # #
# ]
326 : : }
327 : :
328 : : /**
329 : : * gfpflags_normal_context - is gfp_flags a normal sleepable context?
330 : : * @gfp_flags: gfp_flags to test
331 : : *
332 : : * Test whether @gfp_flags indicates that the allocation is from the
333 : : * %current context and allowed to sleep.
334 : : *
335 : : * An allocation being allowed to block doesn't mean it owns the %current
336 : : * context. When direct reclaim path tries to allocate memory, the
337 : : * allocation context is nested inside whatever %current was doing at the
338 : : * time of the original allocation. The nested allocation may be allowed
339 : : * to block but modifying anything %current owns can corrupt the outer
340 : : * context's expectations.
341 : : *
342 : : * %true result from this function indicates that the allocation context
343 : : * can sleep and use anything that's associated with %current.
344 : : */
345 : 0 : static inline bool gfpflags_normal_context(const gfp_t gfp_flags)
346 : : {
347 [ # # ]: 0 : return (gfp_flags & (__GFP_DIRECT_RECLAIM | __GFP_MEMALLOC)) ==
348 : : __GFP_DIRECT_RECLAIM;
349 : : }
350 : :
351 : : #ifdef CONFIG_HIGHMEM
352 : : #define OPT_ZONE_HIGHMEM ZONE_HIGHMEM
353 : : #else
354 : : #define OPT_ZONE_HIGHMEM ZONE_NORMAL
355 : : #endif
356 : :
357 : : #ifdef CONFIG_ZONE_DMA
358 : : #define OPT_ZONE_DMA ZONE_DMA
359 : : #else
360 : : #define OPT_ZONE_DMA ZONE_NORMAL
361 : : #endif
362 : :
363 : : #ifdef CONFIG_ZONE_DMA32
364 : : #define OPT_ZONE_DMA32 ZONE_DMA32
365 : : #else
366 : : #define OPT_ZONE_DMA32 ZONE_NORMAL
367 : : #endif
368 : :
369 : : /*
370 : : * GFP_ZONE_TABLE is a word size bitstring that is used for looking up the
371 : : * zone to use given the lowest 4 bits of gfp_t. Entries are GFP_ZONES_SHIFT
372 : : * bits long and there are 16 of them to cover all possible combinations of
373 : : * __GFP_DMA, __GFP_DMA32, __GFP_MOVABLE and __GFP_HIGHMEM.
374 : : *
375 : : * The zone fallback order is MOVABLE=>HIGHMEM=>NORMAL=>DMA32=>DMA.
376 : : * But GFP_MOVABLE is not only a zone specifier but also an allocation
377 : : * policy. Therefore __GFP_MOVABLE plus another zone selector is valid.
378 : : * Only 1 bit of the lowest 3 bits (DMA,DMA32,HIGHMEM) can be set to "1".
379 : : *
380 : : * bit result
381 : : * =================
382 : : * 0x0 => NORMAL
383 : : * 0x1 => DMA or NORMAL
384 : : * 0x2 => HIGHMEM or NORMAL
385 : : * 0x3 => BAD (DMA+HIGHMEM)
386 : : * 0x4 => DMA32 or NORMAL
387 : : * 0x5 => BAD (DMA+DMA32)
388 : : * 0x6 => BAD (HIGHMEM+DMA32)
389 : : * 0x7 => BAD (HIGHMEM+DMA32+DMA)
390 : : * 0x8 => NORMAL (MOVABLE+0)
391 : : * 0x9 => DMA or NORMAL (MOVABLE+DMA)
392 : : * 0xa => MOVABLE (Movable is valid only if HIGHMEM is set too)
393 : : * 0xb => BAD (MOVABLE+HIGHMEM+DMA)
394 : : * 0xc => DMA32 or NORMAL (MOVABLE+DMA32)
395 : : * 0xd => BAD (MOVABLE+DMA32+DMA)
396 : : * 0xe => BAD (MOVABLE+DMA32+HIGHMEM)
397 : : * 0xf => BAD (MOVABLE+DMA32+HIGHMEM+DMA)
398 : : *
399 : : * GFP_ZONES_SHIFT must be <= 2 on 32 bit platforms.
400 : : */
401 : :
402 : : #if defined(CONFIG_ZONE_DEVICE) && (MAX_NR_ZONES-1) <= 4
403 : : /* ZONE_DEVICE is not a valid GFP zone specifier */
404 : : #define GFP_ZONES_SHIFT 2
405 : : #else
406 : : #define GFP_ZONES_SHIFT ZONES_SHIFT
407 : : #endif
408 : :
409 : : #if 16 * GFP_ZONES_SHIFT > BITS_PER_LONG
410 : : #error GFP_ZONES_SHIFT too large to create GFP_ZONE_TABLE integer
411 : : #endif
412 : :
413 : : #define GFP_ZONE_TABLE ( \
414 : : (ZONE_NORMAL << 0 * GFP_ZONES_SHIFT) \
415 : : | (OPT_ZONE_DMA << ___GFP_DMA * GFP_ZONES_SHIFT) \
416 : : | (OPT_ZONE_HIGHMEM << ___GFP_HIGHMEM * GFP_ZONES_SHIFT) \
417 : : | (OPT_ZONE_DMA32 << ___GFP_DMA32 * GFP_ZONES_SHIFT) \
418 : : | (ZONE_NORMAL << ___GFP_MOVABLE * GFP_ZONES_SHIFT) \
419 : : | (OPT_ZONE_DMA << (___GFP_MOVABLE | ___GFP_DMA) * GFP_ZONES_SHIFT) \
420 : : | (ZONE_MOVABLE << (___GFP_MOVABLE | ___GFP_HIGHMEM) * GFP_ZONES_SHIFT)\
421 : : | (OPT_ZONE_DMA32 << (___GFP_MOVABLE | ___GFP_DMA32) * GFP_ZONES_SHIFT)\
422 : : )
423 : :
424 : : /*
425 : : * GFP_ZONE_BAD is a bitmap for all combinations of __GFP_DMA, __GFP_DMA32
426 : : * __GFP_HIGHMEM and __GFP_MOVABLE that are not permitted. One flag per
427 : : * entry starting with bit 0. Bit is set if the combination is not
428 : : * allowed.
429 : : */
430 : : #define GFP_ZONE_BAD ( \
431 : : 1 << (___GFP_DMA | ___GFP_HIGHMEM) \
432 : : | 1 << (___GFP_DMA | ___GFP_DMA32) \
433 : : | 1 << (___GFP_DMA32 | ___GFP_HIGHMEM) \
434 : : | 1 << (___GFP_DMA | ___GFP_DMA32 | ___GFP_HIGHMEM) \
435 : : | 1 << (___GFP_MOVABLE | ___GFP_HIGHMEM | ___GFP_DMA) \
436 : : | 1 << (___GFP_MOVABLE | ___GFP_DMA32 | ___GFP_DMA) \
437 : : | 1 << (___GFP_MOVABLE | ___GFP_DMA32 | ___GFP_HIGHMEM) \
438 : : | 1 << (___GFP_MOVABLE | ___GFP_DMA32 | ___GFP_DMA | ___GFP_HIGHMEM) \
439 : : )
440 : :
441 : 4767495 : static inline enum zone_type gfp_zone(gfp_t flags)
442 : : {
443 : 4767495 : enum zone_type z;
444 : 4767495 : int bit = (__force int) (flags & GFP_ZONEMASK);
445 : :
446 : 4767495 : z = (GFP_ZONE_TABLE >> (bit * GFP_ZONES_SHIFT)) &
447 : : ((1 << GFP_ZONES_SHIFT) - 1);
448 : 4767495 : VM_BUG_ON((GFP_ZONE_BAD >> bit) & 1);
449 [ + + # # : 4767495 : return z;
# # # # ]
450 : : }
451 : :
452 : : /*
453 : : * There is only one page-allocator function, and two main namespaces to
454 : : * it. The alloc_page*() variants return 'struct page *' and as such
455 : : * can allocate highmem pages, the *get*page*() variants return
456 : : * virtual kernel addresses to the allocated page(s).
457 : : */
458 : :
459 : 4750076 : static inline int gfp_zonelist(gfp_t flags)
460 : : {
461 : : #ifdef CONFIG_NUMA
462 : 4750076 : if (unlikely(flags & __GFP_THISNODE))
463 : 0 : return ZONELIST_NOFALLBACK;
464 : : #endif
465 : : return ZONELIST_FALLBACK;
466 : : }
467 : :
468 : : /*
469 : : * We get the zone list from the current node and the gfp_mask.
470 : : * This zone list contains a maximum of MAXNODES*MAX_NR_ZONES zones.
471 : : * There are two zonelists per node, one for all zones with memory and
472 : : * one containing just zones from the node the zonelist belongs to.
473 : : *
474 : : * For the normal case of non-DISCONTIGMEM systems the NODE_DATA() gets
475 : : * optimized to &contig_page_data at compile-time.
476 : : */
477 : 4750076 : static inline struct zonelist *node_zonelist(int nid, gfp_t flags)
478 : : {
479 [ - + + + : 4750076 : return NODE_DATA(nid)->node_zonelists + gfp_zonelist(flags);
+ - ]
480 : : }
481 : :
482 : : #ifndef HAVE_ARCH_FREE_PAGE
483 : : static inline void arch_free_page(struct page *page, int order) { }
484 : : #endif
485 : : #ifndef HAVE_ARCH_ALLOC_PAGE
486 : 4002063 : static inline void arch_alloc_page(struct page *page, int order) { }
487 : : #endif
488 : :
489 : : struct page *
490 : : __alloc_pages_nodemask(gfp_t gfp_mask, unsigned int order, int preferred_nid,
491 : : nodemask_t *nodemask);
492 : :
493 : : static inline struct page *
494 : 203879 : __alloc_pages(gfp_t gfp_mask, unsigned int order, int preferred_nid)
495 : : {
496 : 203879 : return __alloc_pages_nodemask(gfp_mask, order, preferred_nid, NULL);
497 : : }
498 : :
499 : : /*
500 : : * Allocate pages, preferring the node given as nid. The node must be valid and
501 : : * online. For more general interface, see alloc_pages_node().
502 : : */
503 : : static inline struct page *
504 : 16400 : __alloc_pages_node(int nid, gfp_t gfp_mask, unsigned int order)
505 : : {
506 : 16400 : VM_BUG_ON(nid < 0 || nid >= MAX_NUMNODES);
507 : 16400 : VM_WARN_ON((gfp_mask & __GFP_THISNODE) && !node_online(nid));
508 : :
509 : 16262 : return __alloc_pages(gfp_mask, order, nid);
510 : : }
511 : :
512 : : /*
513 : : * Allocate pages, preferring the node given as nid. When nid == NUMA_NO_NODE,
514 : : * prefer the current CPU's closest node. Otherwise node must be valid and
515 : : * online.
516 : : */
517 : 15429 : static inline struct page *alloc_pages_node(int nid, gfp_t gfp_mask,
518 : : unsigned int order)
519 : : {
520 [ + + - + : 15429 : if (nid == NUMA_NO_NODE)
- + ]
521 : 14019 : nid = numa_mem_id();
522 : :
523 : 15429 : return __alloc_pages_node(nid, gfp_mask, order);
524 : : }
525 : :
526 : : #ifdef CONFIG_NUMA
527 : : extern struct page *alloc_pages_current(gfp_t gfp_mask, unsigned order);
528 : :
529 : : static inline struct page *
530 : 2214342 : alloc_pages(gfp_t gfp_mask, unsigned int order)
531 : : {
532 : 2214342 : return alloc_pages_current(gfp_mask, order);
533 : : }
534 : : extern struct page *alloc_pages_vma(gfp_t gfp_mask, int order,
535 : : struct vm_area_struct *vma, unsigned long addr,
536 : : int node, bool hugepage);
537 : : #define alloc_hugepage_vma(gfp_mask, vma, addr, order) \
538 : : alloc_pages_vma(gfp_mask, order, vma, addr, numa_node_id(), true)
539 : : #else
540 : : #define alloc_pages(gfp_mask, order) \
541 : : alloc_pages_node(numa_node_id(), gfp_mask, order)
542 : : #define alloc_pages_vma(gfp_mask, order, vma, addr, node, false)\
543 : : alloc_pages(gfp_mask, order)
544 : : #define alloc_hugepage_vma(gfp_mask, vma, addr, order) \
545 : : alloc_pages(gfp_mask, order)
546 : : #endif
547 : : #define alloc_page(gfp_mask) alloc_pages(gfp_mask, 0)
548 : : #define alloc_page_vma(gfp_mask, vma, addr) \
549 : : alloc_pages_vma(gfp_mask, 0, vma, addr, numa_node_id(), false)
550 : : #define alloc_page_vma_node(gfp_mask, vma, addr, node) \
551 : : alloc_pages_vma(gfp_mask, 0, vma, addr, node, false)
552 : :
553 : : extern unsigned long __get_free_pages(gfp_t gfp_mask, unsigned int order);
554 : : extern unsigned long get_zeroed_page(gfp_t gfp_mask);
555 : :
556 : : void *alloc_pages_exact(size_t size, gfp_t gfp_mask);
557 : : void free_pages_exact(void *virt, size_t size);
558 : : void * __meminit alloc_pages_exact_nid(int nid, size_t size, gfp_t gfp_mask);
559 : :
560 : : #define __get_free_page(gfp_mask) \
561 : : __get_free_pages((gfp_mask), 0)
562 : :
563 : : #define __get_dma_pages(gfp_mask, order) \
564 : : __get_free_pages((gfp_mask) | GFP_DMA, (order))
565 : :
566 : : extern void __free_pages(struct page *page, unsigned int order);
567 : : extern void free_pages(unsigned long addr, unsigned int order);
568 : : extern void free_unref_page(struct page *page);
569 : : extern void free_unref_page_list(struct list_head *list);
570 : :
571 : : struct page_frag_cache;
572 : : extern void __page_frag_cache_drain(struct page *page, unsigned int count);
573 : : extern void *page_frag_alloc(struct page_frag_cache *nc,
574 : : unsigned int fragsz, gfp_t gfp_mask);
575 : : extern void page_frag_free(void *addr);
576 : :
577 : : #define __free_page(page) __free_pages((page), 0)
578 : : #define free_page(addr) free_pages((addr), 0)
579 : :
580 : : void page_alloc_init(void);
581 : : void drain_zone_pages(struct zone *zone, struct per_cpu_pages *pcp);
582 : : void drain_all_pages(struct zone *zone);
583 : : void drain_local_pages(struct zone *zone);
584 : :
585 : : void page_alloc_init_late(void);
586 : :
587 : : /*
588 : : * gfp_allowed_mask is set to GFP_BOOT_MASK during early boot to restrict what
589 : : * GFP flags are used before interrupts are enabled. Once interrupts are
590 : : * enabled, it is set to __GFP_BITS_MASK while the system is running. During
591 : : * hibernation, it is used by PM to avoid I/O during memory allocation while
592 : : * devices are suspended.
593 : : */
594 : : extern gfp_t gfp_allowed_mask;
595 : :
596 : : /* Returns true if the gfp_mask allows use of ALLOC_NO_WATERMARK */
597 : : bool gfp_pfmemalloc_allowed(gfp_t gfp_mask);
598 : :
599 : : extern void pm_restrict_gfp_mask(void);
600 : : extern void pm_restore_gfp_mask(void);
601 : :
602 : : #ifdef CONFIG_PM_SLEEP
603 : : extern bool pm_suspended_storage(void);
604 : : #else
605 : : static inline bool pm_suspended_storage(void)
606 : : {
607 : : return false;
608 : : }
609 : : #endif /* CONFIG_PM_SLEEP */
610 : :
611 : : #ifdef CONFIG_CONTIG_ALLOC
612 : : /* The below functions must be run on a range from a single zone. */
613 : : extern int alloc_contig_range(unsigned long start, unsigned long end,
614 : : unsigned migratetype, gfp_t gfp_mask);
615 : : extern struct page *alloc_contig_pages(unsigned long nr_pages, gfp_t gfp_mask,
616 : : int nid, nodemask_t *nodemask);
617 : : #endif
618 : : void free_contig_range(unsigned long pfn, unsigned int nr_pages);
619 : :
620 : : #ifdef CONFIG_CMA
621 : : /* CMA stuff */
622 : : extern void init_cma_reserved_pageblock(struct page *page);
623 : : #endif
624 : :
625 : : #endif /* __LINUX_GFP_H */
|