projects/linux·blob assoc-array-fixes · refs

120 lines · 2.8 KiB

1/* SPDX-License-Identifier: GPL-2.0-or-later */
2/*
3 * mm_init.h:
4 *
5 * mm/ internal mm_init and memblock declarations
6 */
7
8#ifndef __MM_MM_INIT_H
9#define __MM_MM_INIT_H
10
11#include <linux/types.h>
12#include <linux/init.h>
13#include <linux/mmzone.h>
14#include <linux/jump_label.h>
15#include <linux/printk.h>
16
17struct page;
18struct vmem_altmap;
19
20/* perform sanity checks on struct pages being allocated or freed */
21DECLARE_STATIC_KEY_MAYBE(CONFIG_DEBUG_VM, check_pages_enabled);
22
23void set_zone_contiguous(struct zone *zone);
24bool pfn_range_intersects_zones(int nid, unsigned long start_pfn,
25 unsigned long nr_pages);
26
27static inline void clear_zone_contiguous(struct zone *zone)
28{
29 zone->contiguous = false;
30}
31
32void memblock_free_pages(unsigned long pfn, unsigned int order);
33
34void *memmap_alloc(phys_addr_t size, phys_addr_t align, phys_addr_t min_addr,
35 int nid, bool exact_nid);
36
37void memmap_init_range(unsigned long size, int nid, unsigned long zone,
38 unsigned long start_pfn, unsigned long zone_end_pfn,
39 enum meminit_context context,
40 struct vmem_altmap *altmap, int migratetype,
41 bool isolate_pageblock);
42
43#if defined CONFIG_COMPACTION || defined CONFIG_CMA
44/* Free whole pageblock and set its migration type to MIGRATE_CMA. */
45void init_cma_reserved_pageblock(struct page *page);
46#endif
47
48#ifdef CONFIG_CMA
49void init_cma_pageblock(struct page *page);
50#else
51static inline void init_cma_pageblock(struct page *page)
52{
53}
54#endif
55
56/* Memory initialisation debug and verification */
57#ifdef CONFIG_DEFERRED_STRUCT_PAGE_INIT
58DECLARE_STATIC_KEY_TRUE(deferred_pages);
59
60static inline bool deferred_pages_enabled(void)
61{
62 return static_branch_unlikely(&deferred_pages);
63}
64
65bool __init deferred_grow_zone(struct zone *zone, unsigned int order);
66#else
67static inline bool deferred_pages_enabled(void)
68{
69 return false;
70}
71#endif /* CONFIG_DEFERRED_STRUCT_PAGE_INIT */
72
73void init_deferred_page(unsigned long pfn, int nid);
74
75enum mminit_level {
76 MMINIT_WARNING,
77 MMINIT_VERIFY,
78 MMINIT_TRACE
79};
80
81#ifdef CONFIG_DEBUG_MEMORY_INIT
82
83extern int mminit_loglevel;
84
85#define mminit_dprintk(level, prefix, fmt, arg...) \
86do { \
87 if (level < mminit_loglevel) { \
88 if (level <= MMINIT_WARNING) \
89 pr_warn("mminit::" prefix " " fmt, ##arg); \
90 else \
91 printk(KERN_DEBUG "mminit::" prefix " " fmt, ##arg); \
92 } \
93} while (0)
94
95void mminit_verify_pageflags_layout(void);
96void mminit_verify_zonelist(void);
97#else
98
99static inline void mminit_dprintk(enum mminit_level level,
100 const char *prefix, const char *fmt, ...)
101{
102}
103
104static inline void mminit_verify_pageflags_layout(void)
105{
106}
107
108static inline void mminit_verify_zonelist(void)
109{
110}
111#endif /* CONFIG_DEBUG_MEMORY_INIT */
112
113extern bool mirrored_kernelcore;
114bool memblock_has_mirror(void);
115void memblock_free_all(void);
116
117void __meminit __init_single_page(struct page *page, unsigned long pfn,
118 unsigned long zone, int nid);
119
120#endif /* __MM_MM_INIT_H */