1===========================
2Boot time memory management
3===========================
4
5Early system initialization cannot use "normal" memory management
6simply because it is not set up yet. But there is still need to
7allocate memory for various data structures, for instance for the
8physical page allocator.
9
10A specialized allocator called ``memblock`` performs the
11boot time memory management. The architecture specific initialization
12must set it up in :c:func:`setup_arch` and tear it down in
13:c:func:`mem_init` functions.
14
15Once the early memory management is available it offers a variety of
16functions and macros for memory allocations. The allocation request
17may be directed to the first (and probably the only) node or to a
18particular node in a NUMA system. There are API variants that panic
19when an allocation fails and those that don't.
20
21Memblock also offers a variety of APIs that control its own behaviour.
22
23Memblock Overview
24=================
25
26.. kernel-doc:: mm/memblock.c
27   :doc: memblock overview
28
29
30Functions and structures
31========================
32
33Here is the description of memblock data structures, functions and
34macros. Some of them are actually internal, but since they are
35documented it would be silly to omit them. Besides, reading the
36descriptions for the internal functions can help to understand what
37really happens under the hood.
38
39.. kernel-doc:: include/linux/memblock.h
40.. kernel-doc:: mm/memblock.c
41   :functions:
42