Merge tag 'lsm-pr-20221212' of git://git.kernel.org/pub/scm/linux/kernel/git/pcmoore/lsm
[linux-block.git] / include / linux / gfp.h
CommitLineData
b2441318 1/* SPDX-License-Identifier: GPL-2.0 */
1da177e4
LT
2#ifndef __LINUX_GFP_H
3#define __LINUX_GFP_H
4
cb5a065b
IM
5#include <linux/gfp_types.h>
6
1da177e4 7#include <linux/mmzone.h>
082edb7b 8#include <linux/topology.h>
1da177e4
LT
9
10struct vm_area_struct;
11
dd56b046 12/* Convert GFP flags to their corresponding migrate type */
e12ba74d 13#define GFP_MOVABLE_MASK (__GFP_RECLAIMABLE|__GFP_MOVABLE)
016c13da 14#define GFP_MOVABLE_SHIFT 3
6cb06229 15
01c0bfe0 16static inline int gfp_migratetype(const gfp_t gfp_flags)
467c996c 17{
016c13da
MG
18 VM_WARN_ON((gfp_flags & GFP_MOVABLE_MASK) == GFP_MOVABLE_MASK);
19 BUILD_BUG_ON((1UL << GFP_MOVABLE_SHIFT) != ___GFP_MOVABLE);
20 BUILD_BUG_ON((___GFP_MOVABLE >> GFP_MOVABLE_SHIFT) != MIGRATE_MOVABLE);
4d86d4f7
PC
21 BUILD_BUG_ON((___GFP_RECLAIMABLE >> GFP_MOVABLE_SHIFT) != MIGRATE_RECLAIMABLE);
22 BUILD_BUG_ON(((___GFP_MOVABLE | ___GFP_RECLAIMABLE) >>
23 GFP_MOVABLE_SHIFT) != MIGRATE_HIGHATOMIC);
467c996c
MG
24
25 if (unlikely(page_group_by_mobility_disabled))
26 return MIGRATE_UNMOVABLE;
27
28 /* Group based on mobility */
fe573327 29 return (__force unsigned long)(gfp_flags & GFP_MOVABLE_MASK) >> GFP_MOVABLE_SHIFT;
467c996c 30}
dd56b046
MG
31#undef GFP_MOVABLE_MASK
32#undef GFP_MOVABLE_SHIFT
a2f1b424 33
d0164adc
MG
34static inline bool gfpflags_allow_blocking(const gfp_t gfp_flags)
35{
543dfb2d 36 return !!(gfp_flags & __GFP_DIRECT_RECLAIM);
d0164adc
MG
37}
38
b70d94ee
CL
39#ifdef CONFIG_HIGHMEM
40#define OPT_ZONE_HIGHMEM ZONE_HIGHMEM
41#else
42#define OPT_ZONE_HIGHMEM ZONE_NORMAL
43#endif
44
4b51d669 45#ifdef CONFIG_ZONE_DMA
b70d94ee
CL
46#define OPT_ZONE_DMA ZONE_DMA
47#else
48#define OPT_ZONE_DMA ZONE_NORMAL
4b51d669 49#endif
b70d94ee 50
4e4785bc 51#ifdef CONFIG_ZONE_DMA32
b70d94ee
CL
52#define OPT_ZONE_DMA32 ZONE_DMA32
53#else
54#define OPT_ZONE_DMA32 ZONE_NORMAL
4e4785bc 55#endif
b70d94ee
CL
56
57/*
58 * GFP_ZONE_TABLE is a word size bitstring that is used for looking up the
ac2e8e40
HL
59 * zone to use given the lowest 4 bits of gfp_t. Entries are GFP_ZONES_SHIFT
60 * bits long and there are 16 of them to cover all possible combinations of
263ff5d8 61 * __GFP_DMA, __GFP_DMA32, __GFP_MOVABLE and __GFP_HIGHMEM.
b70d94ee
CL
62 *
63 * The zone fallback order is MOVABLE=>HIGHMEM=>NORMAL=>DMA32=>DMA.
64 * But GFP_MOVABLE is not only a zone specifier but also an allocation
65 * policy. Therefore __GFP_MOVABLE plus another zone selector is valid.
263ff5d8 66 * Only 1 bit of the lowest 3 bits (DMA,DMA32,HIGHMEM) can be set to "1".
b70d94ee
CL
67 *
68 * bit result
69 * =================
70 * 0x0 => NORMAL
71 * 0x1 => DMA or NORMAL
72 * 0x2 => HIGHMEM or NORMAL
73 * 0x3 => BAD (DMA+HIGHMEM)
4b33b695 74 * 0x4 => DMA32 or NORMAL
b70d94ee
CL
75 * 0x5 => BAD (DMA+DMA32)
76 * 0x6 => BAD (HIGHMEM+DMA32)
77 * 0x7 => BAD (HIGHMEM+DMA32+DMA)
78 * 0x8 => NORMAL (MOVABLE+0)
79 * 0x9 => DMA or NORMAL (MOVABLE+DMA)
80 * 0xa => MOVABLE (Movable is valid only if HIGHMEM is set too)
81 * 0xb => BAD (MOVABLE+HIGHMEM+DMA)
4b33b695 82 * 0xc => DMA32 or NORMAL (MOVABLE+DMA32)
b70d94ee
CL
83 * 0xd => BAD (MOVABLE+DMA32+DMA)
84 * 0xe => BAD (MOVABLE+DMA32+HIGHMEM)
85 * 0xf => BAD (MOVABLE+DMA32+HIGHMEM+DMA)
86 *
b11a7b94 87 * GFP_ZONES_SHIFT must be <= 2 on 32 bit platforms.
b70d94ee
CL
88 */
89
b11a7b94
DW
90#if defined(CONFIG_ZONE_DEVICE) && (MAX_NR_ZONES-1) <= 4
91/* ZONE_DEVICE is not a valid GFP zone specifier */
92#define GFP_ZONES_SHIFT 2
93#else
94#define GFP_ZONES_SHIFT ZONES_SHIFT
95#endif
96
97#if 16 * GFP_ZONES_SHIFT > BITS_PER_LONG
98#error GFP_ZONES_SHIFT too large to create GFP_ZONE_TABLE integer
b70d94ee
CL
99#endif
100
101#define GFP_ZONE_TABLE ( \
b11a7b94
DW
102 (ZONE_NORMAL << 0 * GFP_ZONES_SHIFT) \
103 | (OPT_ZONE_DMA << ___GFP_DMA * GFP_ZONES_SHIFT) \
104 | (OPT_ZONE_HIGHMEM << ___GFP_HIGHMEM * GFP_ZONES_SHIFT) \
105 | (OPT_ZONE_DMA32 << ___GFP_DMA32 * GFP_ZONES_SHIFT) \
106 | (ZONE_NORMAL << ___GFP_MOVABLE * GFP_ZONES_SHIFT) \
107 | (OPT_ZONE_DMA << (___GFP_MOVABLE | ___GFP_DMA) * GFP_ZONES_SHIFT) \
108 | (ZONE_MOVABLE << (___GFP_MOVABLE | ___GFP_HIGHMEM) * GFP_ZONES_SHIFT)\
109 | (OPT_ZONE_DMA32 << (___GFP_MOVABLE | ___GFP_DMA32) * GFP_ZONES_SHIFT)\
b70d94ee
CL
110)
111
112/*
263ff5d8 113 * GFP_ZONE_BAD is a bitmap for all combinations of __GFP_DMA, __GFP_DMA32
b70d94ee
CL
114 * __GFP_HIGHMEM and __GFP_MOVABLE that are not permitted. One flag per
115 * entry starting with bit 0. Bit is set if the combination is not
116 * allowed.
117 */
118#define GFP_ZONE_BAD ( \
16b56cf4
NK
119 1 << (___GFP_DMA | ___GFP_HIGHMEM) \
120 | 1 << (___GFP_DMA | ___GFP_DMA32) \
121 | 1 << (___GFP_DMA32 | ___GFP_HIGHMEM) \
122 | 1 << (___GFP_DMA | ___GFP_DMA32 | ___GFP_HIGHMEM) \
123 | 1 << (___GFP_MOVABLE | ___GFP_HIGHMEM | ___GFP_DMA) \
124 | 1 << (___GFP_MOVABLE | ___GFP_DMA32 | ___GFP_DMA) \
125 | 1 << (___GFP_MOVABLE | ___GFP_DMA32 | ___GFP_HIGHMEM) \
126 | 1 << (___GFP_MOVABLE | ___GFP_DMA32 | ___GFP_DMA | ___GFP_HIGHMEM) \
b70d94ee
CL
127)
128
129static inline enum zone_type gfp_zone(gfp_t flags)
130{
131 enum zone_type z;
16b56cf4 132 int bit = (__force int) (flags & GFP_ZONEMASK);
b70d94ee 133
b11a7b94
DW
134 z = (GFP_ZONE_TABLE >> (bit * GFP_ZONES_SHIFT)) &
135 ((1 << GFP_ZONES_SHIFT) - 1);
82d4b577 136 VM_BUG_ON((GFP_ZONE_BAD >> bit) & 1);
b70d94ee 137 return z;
4e4785bc
CL
138}
139
1da177e4
LT
140/*
141 * There is only one page-allocator function, and two main namespaces to
142 * it. The alloc_page*() variants return 'struct page *' and as such
143 * can allocate highmem pages, the *get*page*() variants return
144 * virtual kernel addresses to the allocated page(s).
145 */
146
54a6eb5c
MG
147static inline int gfp_zonelist(gfp_t flags)
148{
c00eb15a
YB
149#ifdef CONFIG_NUMA
150 if (unlikely(flags & __GFP_THISNODE))
151 return ZONELIST_NOFALLBACK;
152#endif
153 return ZONELIST_FALLBACK;
54a6eb5c
MG
154}
155
1da177e4
LT
156/*
157 * We get the zone list from the current node and the gfp_mask.
cb152a1a 158 * This zone list contains a maximum of MAX_NUMNODES*MAX_NR_ZONES zones.
54a6eb5c
MG
159 * There are two zonelists per node, one for all zones with memory and
160 * one containing just zones from the node the zonelist belongs to.
1da177e4 161 *
d3c251ab
MR
162 * For the case of non-NUMA systems the NODE_DATA() gets optimized to
163 * &contig_page_data at compile-time.
1da177e4 164 */
0e88460d
MG
165static inline struct zonelist *node_zonelist(int nid, gfp_t flags)
166{
54a6eb5c 167 return NODE_DATA(nid)->node_zonelists + gfp_zonelist(flags);
0e88460d 168}
1da177e4
LT
169
170#ifndef HAVE_ARCH_FREE_PAGE
171static inline void arch_free_page(struct page *page, int order) { }
172#endif
cc102509
NP
173#ifndef HAVE_ARCH_ALLOC_PAGE
174static inline void arch_alloc_page(struct page *page, int order) { }
175#endif
1da177e4 176
84172f4b
MWO
177struct page *__alloc_pages(gfp_t gfp, unsigned int order, int preferred_nid,
178 nodemask_t *nodemask);
cc09cb13
MWO
179struct folio *__folio_alloc(gfp_t gfp, unsigned int order, int preferred_nid,
180 nodemask_t *nodemask);
e4048e5d 181
387ba26f
MG
182unsigned long __alloc_pages_bulk(gfp_t gfp, int preferred_nid,
183 nodemask_t *nodemask, int nr_pages,
0f87d9d3
MG
184 struct list_head *page_list,
185 struct page **page_array);
387ba26f 186
c00b6b96
CW
187unsigned long alloc_pages_bulk_array_mempolicy(gfp_t gfp,
188 unsigned long nr_pages,
189 struct page **page_array);
190
387ba26f
MG
191/* Bulk allocate order-0 pages */
192static inline unsigned long
0f87d9d3 193alloc_pages_bulk_list(gfp_t gfp, unsigned long nr_pages, struct list_head *list)
387ba26f 194{
0f87d9d3
MG
195 return __alloc_pages_bulk(gfp, numa_mem_id(), NULL, nr_pages, list, NULL);
196}
197
198static inline unsigned long
199alloc_pages_bulk_array(gfp_t gfp, unsigned long nr_pages, struct page **page_array)
200{
201 return __alloc_pages_bulk(gfp, numa_mem_id(), NULL, nr_pages, NULL, page_array);
387ba26f
MG
202}
203
a2afc59f
URS
204static inline unsigned long
205alloc_pages_bulk_array_node(gfp_t gfp, int nid, unsigned long nr_pages, struct page **page_array)
206{
207 if (nid == NUMA_NO_NODE)
208 nid = numa_mem_id();
209
210 return __alloc_pages_bulk(gfp, nid, NULL, nr_pages, NULL, page_array);
211}
212
dec1d352
YS
213static inline void warn_if_node_offline(int this_node, gfp_t gfp_mask)
214{
215 gfp_t warn_gfp = gfp_mask & (__GFP_THISNODE|__GFP_NOWARN);
216
217 if (warn_gfp != (__GFP_THISNODE|__GFP_NOWARN))
218 return;
219
220 if (node_online(this_node))
221 return;
222
223 pr_warn("%pGg allocation from offline node %d\n", &gfp_mask, this_node);
224 dump_stack();
225}
226
96db800f
VB
227/*
228 * Allocate pages, preferring the node given as nid. The node must be valid and
229 * online. For more general interface, see alloc_pages_node().
230 */
231static inline struct page *
232__alloc_pages_node(int nid, gfp_t gfp_mask, unsigned int order)
1da177e4 233{
0bc35a97 234 VM_BUG_ON(nid < 0 || nid >= MAX_NUMNODES);
dec1d352 235 warn_if_node_offline(nid, gfp_mask);
819a6928 236
84172f4b 237 return __alloc_pages(gfp_mask, order, nid, NULL);
1da177e4
LT
238}
239
cc09cb13
MWO
240static inline
241struct folio *__folio_alloc_node(gfp_t gfp, unsigned int order, int nid)
242{
243 VM_BUG_ON(nid < 0 || nid >= MAX_NUMNODES);
dec1d352 244 warn_if_node_offline(nid, gfp);
cc09cb13
MWO
245
246 return __folio_alloc(gfp, order, nid, NULL);
247}
248
96db800f
VB
249/*
250 * Allocate pages, preferring the node given as nid. When nid == NUMA_NO_NODE,
82c1fc71
VB
251 * prefer the current CPU's closest node. Otherwise node must be valid and
252 * online.
96db800f
VB
253 */
254static inline struct page *alloc_pages_node(int nid, gfp_t gfp_mask,
6484eb3e
MG
255 unsigned int order)
256{
0bc35a97 257 if (nid == NUMA_NO_NODE)
82c1fc71 258 nid = numa_mem_id();
6484eb3e 259
0bc35a97 260 return __alloc_pages_node(nid, gfp_mask, order);
6484eb3e
MG
261}
262
1da177e4 263#ifdef CONFIG_NUMA
d7f946d0 264struct page *alloc_pages(gfp_t gfp, unsigned int order);
cc09cb13 265struct folio *folio_alloc(gfp_t gfp, unsigned order);
f584b680
MWO
266struct folio *vma_alloc_folio(gfp_t gfp, int order, struct vm_area_struct *vma,
267 unsigned long addr, bool hugepage);
1da177e4 268#else
43ee5b6d
CH
269static inline struct page *alloc_pages(gfp_t gfp_mask, unsigned int order)
270{
271 return alloc_pages_node(numa_node_id(), gfp_mask, order);
272}
cc09cb13
MWO
273static inline struct folio *folio_alloc(gfp_t gfp, unsigned int order)
274{
275 return __folio_alloc_node(gfp, order, numa_node_id());
276}
f584b680
MWO
277#define vma_alloc_folio(gfp, order, vma, addr, hugepage) \
278 folio_alloc(gfp, order)
1da177e4
LT
279#endif
280#define alloc_page(gfp_mask) alloc_pages(gfp_mask, 0)
adf88aa8
MWO
281static inline struct page *alloc_page_vma(gfp_t gfp,
282 struct vm_area_struct *vma, unsigned long addr)
283{
284 struct folio *folio = vma_alloc_folio(gfp, 0, vma, addr, false);
285
286 return &folio->page;
287}
1da177e4 288
b3c97528
HH
289extern unsigned long __get_free_pages(gfp_t gfp_mask, unsigned int order);
290extern unsigned long get_zeroed_page(gfp_t gfp_mask);
1da177e4 291
abd58f38 292void *alloc_pages_exact(size_t size, gfp_t gfp_mask) __alloc_size(1);
2be0ffe2 293void free_pages_exact(void *virt, size_t size);
595ec197 294__meminit void *alloc_pages_exact_nid(int nid, size_t size, gfp_t gfp_mask) __alloc_size(2);
2be0ffe2 295
1da177e4 296#define __get_free_page(gfp_mask) \
fd23855e 297 __get_free_pages((gfp_mask), 0)
1da177e4
LT
298
299#define __get_dma_pages(gfp_mask, order) \
fd23855e 300 __get_free_pages((gfp_mask) | GFP_DMA, (order))
1da177e4 301
b3c97528
HH
302extern void __free_pages(struct page *page, unsigned int order);
303extern void free_pages(unsigned long addr, unsigned int order);
1da177e4 304
b63ae8ca 305struct page_frag_cache;
2976db80 306extern void __page_frag_cache_drain(struct page *page, unsigned int count);
b358e212
KH
307extern void *page_frag_alloc_align(struct page_frag_cache *nc,
308 unsigned int fragsz, gfp_t gfp_mask,
309 unsigned int align_mask);
310
311static inline void *page_frag_alloc(struct page_frag_cache *nc,
312 unsigned int fragsz, gfp_t gfp_mask)
313{
314 return page_frag_alloc_align(nc, fragsz, gfp_mask, ~0u);
315}
316
8c2dd3e4 317extern void page_frag_free(void *addr);
b63ae8ca 318
1da177e4 319#define __free_page(page) __free_pages((page), 0)
fd23855e 320#define free_page(addr) free_pages((addr), 0)
1da177e4
LT
321
322void page_alloc_init(void);
4037d452 323void drain_zone_pages(struct zone *zone, struct per_cpu_pages *pcp);
93481ff0
VB
324void drain_all_pages(struct zone *zone);
325void drain_local_pages(struct zone *zone);
1da177e4 326
0e1cc95b 327void page_alloc_init_late(void);
0e1cc95b 328
f90ac398
MG
329/*
330 * gfp_allowed_mask is set to GFP_BOOT_MASK during early boot to restrict what
331 * GFP flags are used before interrupts are enabled. Once interrupts are
332 * enabled, it is set to __GFP_BITS_MASK while the system is running. During
333 * hibernation, it is used by PM to avoid I/O during memory allocation while
334 * devices are suspended.
335 */
dcce284a
BH
336extern gfp_t gfp_allowed_mask;
337
c93bdd0e
MG
338/* Returns true if the gfp_mask allows use of ALLOC_NO_WATERMARK */
339bool gfp_pfmemalloc_allowed(gfp_t gfp_mask);
340
c9e664f1
RW
341extern void pm_restrict_gfp_mask(void);
342extern void pm_restore_gfp_mask(void);
dcce284a 343
164cc4fe
RR
344extern gfp_t vma_thp_gfp_mask(struct vm_area_struct *vma);
345
f90ac398
MG
346#ifdef CONFIG_PM_SLEEP
347extern bool pm_suspended_storage(void);
348#else
349static inline bool pm_suspended_storage(void)
350{
351 return false;
352}
353#endif /* CONFIG_PM_SLEEP */
354
8df995f6 355#ifdef CONFIG_CONTIG_ALLOC
041d3a8c 356/* The below functions must be run on a range from a single zone. */
0815f3d8 357extern int alloc_contig_range(unsigned long start, unsigned long end,
ca96b625 358 unsigned migratetype, gfp_t gfp_mask);
5e27a2df
AK
359extern struct page *alloc_contig_pages(unsigned long nr_pages, gfp_t gfp_mask,
360 int nid, nodemask_t *nodemask);
080fe206 361#endif
78fa5150 362void free_contig_range(unsigned long pfn, unsigned long nr_pages);
041d3a8c 363
080fe206 364#ifdef CONFIG_CMA
47118af0
MN
365/* CMA stuff */
366extern void init_cma_reserved_pageblock(struct page *page);
041d3a8c
MN
367#endif
368
1da177e4 369#endif /* __LINUX_GFP_H */