sphinx.addnodesdocument)}( rawsourcechildren]( translations LanguagesNode)}(hhh](h pending_xref)}(hhh]docutils.nodesTextChinese (Simplified)}parenthsba attributes}(ids]classes]names]dupnames]backrefs] refdomainstdreftypedoc reftarget)/translations/zh_CN/core-api/boot-time-mmmodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget)/translations/zh_TW/core-api/boot-time-mmmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget)/translations/it_IT/core-api/boot-time-mmmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget)/translations/ja_JP/core-api/boot-time-mmmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget)/translations/ko_KR/core-api/boot-time-mmmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget)/translations/sp_SP/core-api/boot-time-mmmodnameN classnameN refexplicituh1hhh ubeh}(h]h ]h"]h$]h&]current_languageEnglishuh1h hh _documenthsourceNlineNubhsection)}(hhh](htitle)}(hBoot time memory managementh]hBoot time memory management}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhC/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm.rsthKubh paragraph)}(hEarly system initialization cannot use "normal" memory management simply because it is not set up yet. But there is still need to allocate memory for various data structures, for instance for the physical page allocator.h]hEarly system initialization cannot use “normal” memory management simply because it is not set up yet. But there is still need to allocate memory for various data structures, for instance for the physical page allocator.}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(hA specialized allocator called ``memblock`` performs the boot time memory management. The architecture specific initialization must set it up in :c:func:`setup_arch` and tear it down in :c:func:`mem_init` functions.h](hA specialized allocator called }(hhhhhNhNubhliteral)}(h ``memblock``h]hmemblock}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhubhf performs the boot time memory management. The architecture specific initialization must set it up in }(hhhhhNhNubh)}(h:c:func:`setup_arch`h]h)}(hhh]h setup_arch()}(hhhhhNhNubah}(h]h ](xrefcc-funceh"]h$]h&]uh1hhhubah}(h]h ]h"]h$]h&]refdoccore-api/boot-time-mm refdomainhreftypefunc refexplicitrefwarn reftarget setup_archuh1hhhhK hhubh and tear it down in }(hhhhhNhNubh)}(h:c:func:`mem_init`h]h)}(hj h]h mem_init()}(hjhhhNhNubah}(h]h ](hhc-funceh"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&]refdoch refdomainhreftypefunc refexplicitrefwarnjmem_inituh1hhhhK hhubh functions.}(hhhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK hhhhubh)}(hX=Once the early memory management is available it offers a variety of functions and macros for memory allocations. The allocation request may be directed to the first (and probably the only) node or to a particular node in a NUMA system. There are API variants that panic when an allocation fails and those that don't.h]hX?Once the early memory management is available it offers a variety of functions and macros for memory allocations. The allocation request may be directed to the first (and probably the only) node or to a particular node in a NUMA system. There are API variants that panic when an allocation fails and those that don’t.}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(hFMemblock also offers a variety of APIs that control its own behaviour.h]hFMemblock also offers a variety of APIs that control its own behaviour.}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(hhh](h)}(hMemblock Overviewh]hMemblock Overview}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjOhhhhhKubh)}(hMemblock is a method of managing memory regions during the early boot period when the usual kernel memory allocators are not up and running.h]hMemblock is a method of managing memory regions during the early boot period when the usual kernel memory allocators are not up and running.}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:26: ./mm/memblock.chK+hjOhhubh)}(htMemblock views the system memory as collections of contiguous regions. There are several types of these collections:h]htMemblock views the system memory as collections of contiguous regions. There are several types of these collections:}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:26: ./mm/memblock.chK/hjOhhubh bullet_list)}(hhh](h list_item)}(h``memory`` - describes the physical memory available to the kernel; this may differ from the actual physical memory installed in the system, for instance when the memory is restricted with ``mem=`` command line parameterh]h)}(h``memory`` - describes the physical memory available to the kernel; this may differ from the actual physical memory installed in the system, for instance when the memory is restricted with ``mem=`` command line parameterh](h)}(h ``memory``h]hmemory}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh - describes the physical memory available to the kernel; this may differ from the actual physical memory installed in the system, for instance when the memory is restricted with }(hjhhhNhNubh)}(h``mem=``h]hmem=}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh command line parameter}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:26: ./mm/memblock.chK2hjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(h8``reserved`` - describes the regions that were allocatedh]h)}(hjh](h)}(h ``reserved``h]hreserved}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh, - describes the regions that were allocated}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:26: ./mm/memblock.chK6hjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(h``physmem`` - describes the actual physical memory available during boot regardless of the possible restrictions and memory hot(un)plug; the ``physmem`` type is only available on some architectures. h]h)}(h``physmem`` - describes the actual physical memory available during boot regardless of the possible restrictions and memory hot(un)plug; the ``physmem`` type is only available on some architectures.h](h)}(h ``physmem``h]hphysmem}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh - describes the actual physical memory available during boot regardless of the possible restrictions and memory hot(un)plug; the }(hjhhhNhNubh)}(h ``physmem``h]hphysmem}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh. type is only available on some architectures.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:26: ./mm/memblock.chK7hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]bullet*uh1j~hjhK2hjOhhubh)}(hXwEach region is represented by struct memblock_region that defines the region extents, its attributes and NUMA node id on NUMA systems. Every memory type is described by the struct memblock_type which contains an array of memory regions along with the allocator metadata. The "memory" and "reserved" types are nicely wrapped with struct memblock. This structure is statically initialized at build time. The region arrays are initially sized to ``INIT_MEMBLOCK_MEMORY_REGIONS`` for "memory" and ``INIT_MEMBLOCK_RESERVED_REGIONS`` for "reserved". The region array for "physmem" is initially sized to ``INIT_PHYSMEM_REGIONS``. The memblock_allow_resize() enables automatic resizing of the region arrays during addition of new regions. This feature should be used with care so that memory allocated for the region array will not overlap with areas that should be reserved, for example initrd.h](hXEach region is represented by struct memblock_region that defines the region extents, its attributes and NUMA node id on NUMA systems. Every memory type is described by the struct memblock_type which contains an array of memory regions along with the allocator metadata. The “memory” and “reserved” types are nicely wrapped with struct memblock. This structure is statically initialized at build time. The region arrays are initially sized to }(hj%hhhNhNubh)}(h ``INIT_MEMBLOCK_MEMORY_REGIONS``h]hINIT_MEMBLOCK_MEMORY_REGIONS}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj%ubh for “memory” and }(hj%hhhNhNubh)}(h"``INIT_MEMBLOCK_RESERVED_REGIONS``h]hINIT_MEMBLOCK_RESERVED_REGIONS}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj%ubhN for “reserved”. The region array for “physmem” is initially sized to }(hj%hhhNhNubh)}(h``INIT_PHYSMEM_REGIONS``h]hINIT_PHYSMEM_REGIONS}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj%ubhX . The memblock_allow_resize() enables automatic resizing of the region arrays during addition of new regions. This feature should be used with care so that memory allocated for the region array will not overlap with areas that should be reserved, for example initrd.}(hj%hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:26: ./mm/memblock.chK;hjOhhubh)}(hXThe early architecture setup should tell memblock what the physical memory layout is by using memblock_add() or memblock_add_node() functions. The first function does not assign the region to a NUMA node and it is appropriate for UMA systems. Yet, it is possible to use it on NUMA systems as well and assign the region to a NUMA node later in the setup process using memblock_set_node(). The memblock_add_node() performs such an assignment directly.h]hXThe early architecture setup should tell memblock what the physical memory layout is by using memblock_add() or memblock_add_node() functions. The first function does not assign the region to a NUMA node and it is appropriate for UMA systems. Yet, it is possible to use it on NUMA systems as well and assign the region to a NUMA node later in the setup process using memblock_set_node(). The memblock_add_node() performs such an assignment directly.}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:26: ./mm/memblock.chKJhjOhhubh)}(hQOnce memblock is setup the memory can be allocated using one of the API variants:h]hQOnce memblock is setup the memory can be allocated using one of the API variants:}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:26: ./mm/memblock.chKRhjOhhubj)}(hhh](j)}(h`memblock_phys_alloc*() - these functions return the **physical** address of the allocated memoryh]h)}(h`memblock_phys_alloc*() - these functions return the **physical** address of the allocated memoryh](h4memblock_phys_alloc*() - these functions return the }(hjhhhNhNubhstrong)}(h **physical**h]hphysical}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh address of the allocated memory}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:26: ./mm/memblock.chKUhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(h\memblock_alloc*() - these functions return the **virtual** address of the allocated memory. h]h)}(h[memblock_alloc*() - these functions return the **virtual** address of the allocated memory.h](h/memblock_alloc*() - these functions return the }(hjhhhNhNubj)}(h **virtual**h]hvirtual}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh! address of the allocated memory.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:26: ./mm/memblock.chKWhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]j#j$uh1j~hjhKUhjOhhubh)}(hNote, that both API variants use implicit assumptions about allowed memory ranges and the fallback methods. Consult the documentation of memblock_alloc_internal() and memblock_alloc_range_nid() functions for more elaborate description.h]hNote, that both API variants use implicit assumptions about allowed memory ranges and the fallback methods. Consult the documentation of memblock_alloc_internal() and memblock_alloc_range_nid() functions for more elaborate description.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:26: ./mm/memblock.chKZhjOhhubh)}(h~As the system boot progresses, the architecture specific mem_init() function frees all the memory to the buddy page allocator.h]h~As the system boot progresses, the architecture specific mem_init() function frees all the memory to the buddy page allocator.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:26: ./mm/memblock.chK_hjOhhubh)}(hUnless an architecture enables ``CONFIG_ARCH_KEEP_MEMBLOCK``, the memblock data structures (except "physmem") will be discarded after the system initialization completes.h](hUnless an architecture enables }(hjhhhNhNubh)}(h``CONFIG_ARCH_KEEP_MEMBLOCK``h]hCONFIG_ARCH_KEEP_MEMBLOCK}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubhr, the memblock data structures (except “physmem”) will be discarded after the system initialization completes.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:26: ./mm/memblock.chKbhjOhhubeh}(h]memblock-overviewah ]h"]memblock overviewah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(hFunctions and structuresh]hFunctions and structures}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0hhhhhKubh)}(hX$Here is the description of memblock data structures, functions and macros. Some of them are actually internal, but since they are documented it would be silly to omit them. Besides, reading the descriptions for the internal functions can help to understand what really happens under the hood.h]hX$Here is the description of memblock data structures, functions and macros. Some of them are actually internal, but since they are documented it would be silly to omit them. Besides, reading the descriptions for the internal functions can help to understand what really happens under the hood.}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK!hj0hhubhindex)}(hhh]h}(h]h ]h"]h$]h&]entries](singlememblock_flags (C enum)c.memblock_flagshNtauh1jOhj0hhhNhNubhdesc)}(hhh](hdesc_signature)}(hmemblock_flagsh]hdesc_signature_line)}(henum memblock_flagsh](hdesc_sig_keyword)}(henumh]henum}(hjshhhNhNubah}(h]h ]kah"]h$]h&]uh1jqhjmhhh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhKubhdesc_sig_space)}(h h]h }(hjhhhNhNubah}(h]h ]wah"]h$]h&]uh1jhjmhhhjhKubh desc_name)}(hmemblock_flagsh]h desc_sig_name)}(hjih]hmemblock_flags}(hjhhhNhNubah}(h]h ]nah"]h$]h&]uh1jhjubah}(h]h ](sig-namedescnameeh"]h$]h&] xml:spacepreserveuh1jhjmhhhjhKubeh}(h]h ]h"]h$]h&]jj add_permalinkuh1jksphinx_line_type declaratorhjghhhjhKubah}(h]j^ah ](sig sig-objecteh"]h$]h&] is_multiline _toc_parts) _toc_namehuh1jehjhKhjbhhubh desc_content)}(hhh]h)}(h&definition of memory region attributesh]h&definition of memory region attributes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhKhjhhubah}(h]h ]h"]h$]h&]uh1jhjbhhhjhKubeh}(h]h ](henumeh"]h$]h&]domainhobjtypejdesctypejnoindex noindexentrynocontentsentryuh1j`hhhj0hNhNubh container)}(hX1**Constants** ``MEMBLOCK_NONE`` no special request ``MEMBLOCK_HOTPLUG`` memory region indicated in the firmware-provided memory map during early boot as hot(un)pluggable system RAM (e.g., memory range that might get hotunplugged later). With "movable_node" set on the kernel commandline, try keeping this memory region hotunpluggable. Does not apply to memblocks added ("hotplugged") after early boot. ``MEMBLOCK_MIRROR`` mirrored region ``MEMBLOCK_NOMAP`` don't add to kernel direct mapping and treat as reserved in the memory map; refer to memblock_mark_nomap() description for further details ``MEMBLOCK_DRIVER_MANAGED`` memory region that is always detected and added via a driver, and never indicated in the firmware-provided memory map as system RAM. This corresponds to IORESOURCE_SYSRAM_DRIVER_MANAGED in the kernel resource tree. ``MEMBLOCK_RSRV_NOINIT`` reserved memory region for which struct pages are not fully initialized. Users of this flag are responsible to properly initialize struct pages of this region ``MEMBLOCK_RSRV_KERN`` memory region that is reserved for kernel use, either explictitly with memblock_reserve_kern() or via memblock allocation APIs. All memblock allocations set this flag. ``MEMBLOCK_KHO_SCRATCH`` memory region that kexec can pass to the next kernel in handover mode. During early boot, we do not know about all memory reservations yet, so we get scratch memory from the previous kernel that we know is good to use. It is the only memory that allocations may happen from in this phase.h](h)}(h **Constants**h]j)}(hjh]h Constants}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhK hjubhdefinition_list)}(hhh](hdefinition_list_item)}(h%``MEMBLOCK_NONE`` no special request h](hterm)}(h``MEMBLOCK_NONE``h]h)}(hjh]h MEMBLOCK_NONE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhK#hjubh definition)}(hhh]h)}(hno special requesth]hno special request}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj1hK#hj4ubah}(h]h ]h"]h$]h&]uh1j2hjubeh}(h]h ]h"]h$]h&]uh1jhj1hK#hjubj)}(hX_``MEMBLOCK_HOTPLUG`` memory region indicated in the firmware-provided memory map during early boot as hot(un)pluggable system RAM (e.g., memory range that might get hotunplugged later). With "movable_node" set on the kernel commandline, try keeping this memory region hotunpluggable. Does not apply to memblocks added ("hotplugged") after early boot. h](j)}(h``MEMBLOCK_HOTPLUG``h]h)}(hjWh]hMEMBLOCK_HOTPLUG}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjUubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhK*hjQubj3)}(hhh]h)}(hXImemory region indicated in the firmware-provided memory map during early boot as hot(un)pluggable system RAM (e.g., memory range that might get hotunplugged later). With "movable_node" set on the kernel commandline, try keeping this memory region hotunpluggable. Does not apply to memblocks added ("hotplugged") after early boot.h]hXQmemory region indicated in the firmware-provided memory map during early boot as hot(un)pluggable system RAM (e.g., memory range that might get hotunplugged later). With “movable_node” set on the kernel commandline, try keeping this memory region hotunpluggable. Does not apply to memblocks added (“hotplugged”) after early boot.}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhK&hjmubah}(h]h ]h"]h$]h&]uh1j2hjQubeh}(h]h ]h"]h$]h&]uh1jhjlhK*hjubj)}(h$``MEMBLOCK_MIRROR`` mirrored region h](j)}(h``MEMBLOCK_MIRROR``h]h)}(hjh]hMEMBLOCK_MIRROR}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhK-hjubj3)}(hhh]h)}(hmirrored regionh]hmirrored region}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK-hjubah}(h]h ]h"]h$]h&]uh1j2hjubeh}(h]h ]h"]h$]h&]uh1jhjhK-hjubj)}(h``MEMBLOCK_NOMAP`` don't add to kernel direct mapping and treat as reserved in the memory map; refer to memblock_mark_nomap() description for further details h](j)}(h``MEMBLOCK_NOMAP``h]h)}(hjh]hMEMBLOCK_NOMAP}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhK2hjubj3)}(hhh]h)}(hdon't add to kernel direct mapping and treat as reserved in the memory map; refer to memblock_mark_nomap() description for further detailsh]hdon’t add to kernel direct mapping and treat as reserved in the memory map; refer to memblock_mark_nomap() description for further details}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhK0hjubah}(h]h ]h"]h$]h&]uh1j2hjubeh}(h]h ]h"]h$]h&]uh1jhjhK2hjubj)}(h``MEMBLOCK_DRIVER_MANAGED`` memory region that is always detected and added via a driver, and never indicated in the firmware-provided memory map as system RAM. This corresponds to IORESOURCE_SYSRAM_DRIVER_MANAGED in the kernel resource tree. h](j)}(h``MEMBLOCK_DRIVER_MANAGED``h]h)}(hjh]hMEMBLOCK_DRIVER_MANAGED}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhK8hjubj3)}(hhh]h)}(hmemory region that is always detected and added via a driver, and never indicated in the firmware-provided memory map as system RAM. This corresponds to IORESOURCE_SYSRAM_DRIVER_MANAGED in the kernel resource tree.h]hmemory region that is always detected and added via a driver, and never indicated in the firmware-provided memory map as system RAM. This corresponds to IORESOURCE_SYSRAM_DRIVER_MANAGED in the kernel resource tree.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhK5hjubah}(h]h ]h"]h$]h&]uh1j2hjubeh}(h]h ]h"]h$]h&]uh1jhjhK8hjubj)}(h``MEMBLOCK_RSRV_NOINIT`` reserved memory region for which struct pages are not fully initialized. Users of this flag are responsible to properly initialize struct pages of this region h](j)}(h``MEMBLOCK_RSRV_NOINIT``h]h)}(hj>h]hMEMBLOCK_RSRV_NOINIT}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj<ubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhK=hj8ubj3)}(hhh]h)}(hreserved memory region for which struct pages are not fully initialized. Users of this flag are responsible to properly initialize struct pages of this regionh]hreserved memory region for which struct pages are not fully initialized. Users of this flag are responsible to properly initialize struct pages of this region}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhK;hjTubah}(h]h ]h"]h$]h&]uh1j2hj8ubeh}(h]h ]h"]h$]h&]uh1jhjShK=hjubj)}(h``MEMBLOCK_RSRV_KERN`` memory region that is reserved for kernel use, either explictitly with memblock_reserve_kern() or via memblock allocation APIs. All memblock allocations set this flag. h](j)}(h``MEMBLOCK_RSRV_KERN``h]h)}(hjxh]hMEMBLOCK_RSRV_KERN}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjvubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhKBhjrubj3)}(hhh]h)}(hmemory region that is reserved for kernel use, either explictitly with memblock_reserve_kern() or via memblock allocation APIs. All memblock allocations set this flag.h]hmemory region that is reserved for kernel use, either explictitly with memblock_reserve_kern() or via memblock allocation APIs. All memblock allocations set this flag.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhK@hjubah}(h]h ]h"]h$]h&]uh1j2hjrubeh}(h]h ]h"]h$]h&]uh1jhjhKBhjubj)}(hX9``MEMBLOCK_KHO_SCRATCH`` memory region that kexec can pass to the next kernel in handover mode. During early boot, we do not know about all memory reservations yet, so we get scratch memory from the previous kernel that we know is good to use. It is the only memory that allocations may happen from in this phase.h](j)}(h``MEMBLOCK_KHO_SCRATCH``h]h)}(hjh]hMEMBLOCK_KHO_SCRATCH}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhKHhjubj3)}(hhh]h)}(hX memory region that kexec can pass to the next kernel in handover mode. During early boot, we do not know about all memory reservations yet, so we get scratch memory from the previous kernel that we know is good to use. It is the only memory that allocations may happen from in this phase.h]hX memory region that kexec can pass to the next kernel in handover mode. During early boot, we do not know about all memory reservations yet, so we get scratch memory from the previous kernel that we know is good to use. It is the only memory that allocations may happen from in this phase.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhKEhjubah}(h]h ]h"]h$]h&]uh1j2hjubeh}(h]h ]h"]h$]h&]uh1jhjhKHhjubeh}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj0hhhNhNubjP)}(hhh]h}(h]h ]h"]h$]h&]entries](j\memblock_region (C struct)c.memblock_regionhNtauh1jOhj0hhhNhNubja)}(hhh](jf)}(hmemblock_regionh]jl)}(hstruct memblock_regionh](jr)}(hstructh]hstruct}(hj hhhNhNubah}(h]h ]j~ah"]h$]h&]uh1jqhjhhh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhKNubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKNubj)}(hmemblock_regionh]j)}(hjh]hmemblock_region}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhKNubeh}(h]h ]h"]h$]h&]jjjuh1jkjjhjhhhjhKNubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jehjhKNhjhhubj)}(hhh]h)}(hrepresents a memory regionh]hrepresents a memory region}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhKChjLhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKNubeh}(h]h ](hstructeh"]h$]h&]jhjjgjjgjjjuh1j`hhhj0hNhNubj)}(hXB**Definition**:: struct memblock_region { phys_addr_t base; phys_addr_t size; enum memblock_flags flags; #ifdef CONFIG_NUMA; int nid; #endif; }; **Members** ``base`` base address of the region ``size`` size of the region ``flags`` memory region attributes ``nid`` NUMA node idh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubh:}(hjohhhNhNubeh}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhKGhjkubh literal_block)}(hstruct memblock_region { phys_addr_t base; phys_addr_t size; enum memblock_flags flags; #ifdef CONFIG_NUMA; int nid; #endif; };h]hstruct memblock_region { phys_addr_t base; phys_addr_t size; enum memblock_flags flags; #ifdef CONFIG_NUMA; int nid; #endif; };}hjsbah}(h]h ]h"]h$]h&]jjuh1jh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhKIhjkubh)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhKRhjkubj)}(hhh](j)}(h$``base`` base address of the region h](j)}(h``base``h]h)}(hjh]hbase}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhKEhjubj3)}(hhh]h)}(hbase address of the regionh]hbase address of the region}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKEhjubah}(h]h ]h"]h$]h&]uh1j2hjubeh}(h]h ]h"]h$]h&]uh1jhjhKEhjubj)}(h``size`` size of the region h](j)}(h``size``h]h)}(hjh]hsize}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhKFhjubj3)}(hhh]h)}(hsize of the regionh]hsize of the region}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKFhj ubah}(h]h ]h"]h$]h&]uh1j2hjubeh}(h]h ]h"]h$]h&]uh1jhj hKFhjubj)}(h#``flags`` memory region attributes h](j)}(h ``flags``h]h)}(hj0h]hflags}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj.ubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhKGhj*ubj3)}(hhh]h)}(hmemory region attributesh]hmemory region attributes}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjEhKGhjFubah}(h]h ]h"]h$]h&]uh1j2hj*ubeh}(h]h ]h"]h$]h&]uh1jhjEhKGhjubj)}(h``nid`` NUMA node idh](j)}(h``nid``h]h)}(hjih]hnid}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjgubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhKGhjcubj3)}(hhh]h)}(h NUMA node idh]h NUMA node id}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhKHhjubah}(h]h ]h"]h$]h&]uh1j2hjcubeh}(h]h ]h"]h$]h&]uh1jhj~hKGhjubeh}(h]h ]h"]h$]h&]uh1j hjkubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj0hhhNhNubjP)}(hhh]h}(h]h ]h"]h$]h&]entries](j\memblock_type (C struct)c.memblock_typehNtauh1jOhj0hhhNhNubja)}(hhh](jf)}(h memblock_typeh]jl)}(hstruct memblock_typeh](jr)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j~ah"]h$]h&]uh1jqhjhhh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhKNubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKNubj)}(h memblock_typeh]j)}(hjh]h memblock_type}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhKNubeh}(h]h ]h"]h$]h&]jjjuh1jkjjhjhhhjhKNubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jehjhKNhjhhubj)}(hhh]h)}(h,collection of memory regions of certain typeh]h,collection of memory regions of certain type}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhKShjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKNubeh}(h]h ](hstructeh"]h$]h&]jhjjjjjjjuh1j`hhhj0hNhNubj)}(hXy**Definition**:: struct memblock_type { unsigned long cnt; unsigned long max; phys_addr_t total_size; struct memblock_region *regions; char *name; }; **Members** ``cnt`` number of regions ``max`` size of the allocated array ``total_size`` size of all regions ``regions`` array of regions ``name`` the memory type symbolic nameh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubh:}(hj%hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhKWhj!ubj)}(hstruct memblock_type { unsigned long cnt; unsigned long max; phys_addr_t total_size; struct memblock_region *regions; char *name; };h]hstruct memblock_type { unsigned long cnt; unsigned long max; phys_addr_t total_size; struct memblock_region *regions; char *name; };}hjBsbah}(h]h ]h"]h$]h&]jjuh1jh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhKYhj!ubh)}(h **Members**h]j)}(hjSh]hMembers}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhKahj!ubj)}(hhh](j)}(h``cnt`` number of regions h](j)}(h``cnt``h]h)}(hjrh]hcnt}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1hhjpubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhKUhjlubj3)}(hhh]h)}(hnumber of regionsh]hnumber of regions}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKUhjubah}(h]h ]h"]h$]h&]uh1j2hjlubeh}(h]h ]h"]h$]h&]uh1jhjhKUhjiubj)}(h$``max`` size of the allocated array h](j)}(h``max``h]h)}(hjh]hmax}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhKVhjubj3)}(hhh]h)}(hsize of the allocated arrayh]hsize of the allocated array}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKVhjubah}(h]h ]h"]h$]h&]uh1j2hjubeh}(h]h ]h"]h$]h&]uh1jhjhKVhjiubj)}(h#``total_size`` size of all regions h](j)}(h``total_size``h]h)}(hjh]h total_size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhKWhjubj3)}(hhh]h)}(hsize of all regionsh]hsize of all regions}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKWhjubah}(h]h ]h"]h$]h&]uh1j2hjubeh}(h]h ]h"]h$]h&]uh1jhjhKWhjiubj)}(h``regions`` array of regions h](j)}(h ``regions``h]h)}(hj h]hregions}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhKXhj ubj3)}(hhh]h)}(harray of regionsh]harray of regions}(hj6 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj2 hKXhj3 ubah}(h]h ]h"]h$]h&]uh1j2hj ubeh}(h]h ]h"]h$]h&]uh1jhj2 hKXhjiubj)}(h&``name`` the memory type symbolic nameh](j)}(h``name``h]h)}(hjV h]hname}(hjX hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjT ubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhKXhjP ubj3)}(hhh]h)}(hthe memory type symbolic nameh]hthe memory type symbolic name}(hjo hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhKYhjl ubah}(h]h ]h"]h$]h&]uh1j2hjP ubeh}(h]h ]h"]h$]h&]uh1jhjk hKXhjiubeh}(h]h ]h"]h$]h&]uh1j hj!ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj0hhhNhNubjP)}(hhh]h}(h]h ]h"]h$]h&]entries](j\memblock (C struct) c.memblockhNtauh1jOhj0hhhNhNubja)}(hhh](jf)}(hmemblockh]jl)}(hstruct memblockh](jr)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]j~ah"]h$]h&]uh1jqhj hhh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhK_ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhj hK_ubj)}(hmemblockh]j)}(hj h]hmemblock}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj hhhj hK_ubeh}(h]h ]h"]h$]h&]jjjuh1jkjjhj hhhj hK_ubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1jehj hK_hj hhubj)}(hhh]h)}(hmemblock allocator metadatah]hmemblock allocator metadata}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhKchj hhubah}(h]h ]h"]h$]h&]uh1jhj hhhj hK_ubeh}(h]h ](hstructeh"]h$]h&]jhjj jj jjjuh1j`hhhj0hNhNubj)}(hXq**Definition**:: struct memblock { bool bottom_up; phys_addr_t current_limit; struct memblock_type memory; struct memblock_type reserved; }; **Members** ``bottom_up`` is bottom up direction? ``current_limit`` physical address of the current allocation limit ``memory`` usable memory regions ``reserved`` reserved memory regionsh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh:}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhKghj ubj)}(hstruct memblock { bool bottom_up; phys_addr_t current_limit; struct memblock_type memory; struct memblock_type reserved; };h]hstruct memblock { bool bottom_up; phys_addr_t current_limit; struct memblock_type memory; struct memblock_type reserved; };}hj/ sbah}(h]h ]h"]h$]h&]jjuh1jh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhKihj ubh)}(h **Members**h]j)}(hj@ h]hMembers}(hjB hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj> ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhKphj ubj)}(hhh](j)}(h&``bottom_up`` is bottom up direction? h](j)}(h ``bottom_up``h]h)}(hj_ h]h bottom_up}(hja hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj] ubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhKehjY ubj3)}(hhh]h)}(his bottom up direction?h]his bottom up direction?}(hjx hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjt hKehju ubah}(h]h ]h"]h$]h&]uh1j2hjY ubeh}(h]h ]h"]h$]h&]uh1jhjt hKehjV ubj)}(hC``current_limit`` physical address of the current allocation limit h](j)}(h``current_limit``h]h)}(hj h]h current_limit}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhKfhj ubj3)}(hhh]h)}(h0physical address of the current allocation limith]h0physical address of the current allocation limit}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKfhj ubah}(h]h ]h"]h$]h&]uh1j2hj ubeh}(h]h ]h"]h$]h&]uh1jhj hKfhjV ubj)}(h!``memory`` usable memory regions h](j)}(h ``memory``h]h)}(hj h]hmemory}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhKghj ubj3)}(hhh]h)}(husable memory regionsh]husable memory regions}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKghj ubah}(h]h ]h"]h$]h&]uh1j2hj ubeh}(h]h ]h"]h$]h&]uh1jhj hKghjV ubj)}(h$``reserved`` reserved memory regionsh](j)}(h ``reserved``h]h)}(hj h]hreserved}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhKghj ubj3)}(hhh]h)}(hreserved memory regionsh]hreserved memory regions}(hj# hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhKhhj ubah}(h]h ]h"]h$]h&]uh1j2hj ubeh}(h]h ]h"]h$]h&]uh1jhj hKghjV ubeh}(h]h ]h"]h$]h&]uh1j hj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj0hhhNhNubjP)}(hhh]h}(h]h ]h"]h$]h&]entries](j\ for_each_physmem_range (C macro)c.for_each_physmem_rangehNtauh1jOhj0hhhNhNubja)}(hhh](jf)}(hfor_each_physmem_rangeh]jl)}(hfor_each_physmem_rangeh]j)}(hfor_each_physmem_rangeh]j)}(hj^ h]hfor_each_physmem_range}(hjh hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjd ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj` hhh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhKubah}(h]h ]h"]h$]h&]jjjuh1jkjjhj\ hhhj{ hKubah}(h]jW ah ](jjeh"]h$]h&]jj)jhuh1jehj{ hKhjY hhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjY hhhj{ hKubeh}(h]h ](hmacroeh"]h$]h&]jhjj jj jjjuh1j`hhhj0hNhNubh)}(h4``for_each_physmem_range (i, type, p_start, p_end)``h]h)}(hj h]h0for_each_physmem_range (i, type, p_start, p_end)}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhKhj0hhubh block_quote)}(h4iterate through physmem areas not included in type. h]h)}(h3iterate through physmem areas not included in type.h]h3iterate through physmem areas not included in type.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhKhj ubah}(h]h ]h"]h$]h&]uh1j hj hKhj0hhubj)}(hX%**Parameters** ``i`` u64 used as loop variable ``type`` ptr to memblock_type which excludes from the iteration, can be ``NULL`` ``p_start`` ptr to phys_addr_t for start address of the range, can be ``NULL`` ``p_end`` ptr to phys_addr_t for end address of the range, can be ``NULL``h](h)}(h**Parameters**h]j)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhKhj ubj)}(hhh](j)}(h ``i`` u64 used as loop variable h](j)}(h``i``h]h)}(hj h]hi}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhKhj ubj3)}(hhh]h)}(hu64 used as loop variableh]hu64 used as loop variable}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKhj ubah}(h]h ]h"]h$]h&]uh1j2hj ubeh}(h]h ]h"]h$]h&]uh1jhj hKhj ubj)}(hQ``type`` ptr to memblock_type which excludes from the iteration, can be ``NULL`` h](j)}(h``type``h]h)}(hj) h]htype}(hj+ hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj' ubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhKhj# ubj3)}(hhh]h)}(hGptr to memblock_type which excludes from the iteration, can be ``NULL``h](h?ptr to memblock_type which excludes from the iteration, can be }(hjB hhhNhNubh)}(h``NULL``h]hNULL}(hjJ hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjB ubeh}(h]h ]h"]h$]h&]uh1hhj> hKhj? ubah}(h]h ]h"]h$]h&]uh1j2hj# ubeh}(h]h ]h"]h$]h&]uh1jhj> hKhj ubj)}(hO``p_start`` ptr to phys_addr_t for start address of the range, can be ``NULL`` h](j)}(h ``p_start``h]h)}(hjp h]hp_start}(hjr hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjn ubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhKhjj ubj3)}(hhh]h)}(hBptr to phys_addr_t for start address of the range, can be ``NULL``h](h:ptr to phys_addr_t for start address of the range, can be }(hj hhhNhNubh)}(h``NULL``h]hNULL}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]uh1hhj hKhj ubah}(h]h ]h"]h$]h&]uh1j2hjj ubeh}(h]h ]h"]h$]h&]uh1jhj hKhj ubj)}(hJ``p_end`` ptr to phys_addr_t for end address of the range, can be ``NULL``h](j)}(h ``p_end``h]h)}(hj h]hp_end}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhKhj ubj3)}(hhh]h)}(h@ptr to phys_addr_t for end address of the range, can be ``NULL``h](h8ptr to phys_addr_t for end address of the range, can be }(hj hhhNhNubh)}(h``NULL``h]hNULL}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhKhj ubah}(h]h ]h"]h$]h&]uh1j2hj ubeh}(h]h ]h"]h$]h&]uh1jhj hKhj ubeh}(h]h ]h"]h$]h&]uh1j hj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj0hhhNhNubjP)}(hhh]h}(h]h ]h"]h$]h&]entries](j\__for_each_mem_range (C macro)c.__for_each_mem_rangehNtauh1jOhj0hhhNhNubja)}(hhh](jf)}(h__for_each_mem_rangeh]jl)}(h__for_each_mem_rangeh]j)}(h__for_each_mem_rangeh]j)}(hj h]h__for_each_mem_range}(hj# hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj hhh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhKubah}(h]h ]h"]h$]h&]jjjuh1jkjjhj hhhj6 hKubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1jehj6 hKhj hhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj hhhj6 hKubeh}(h]h ](hmacroeh"]h$]h&]jhjjO jjO jjjuh1j`hhhj0hNhNubh)}(hO``__for_each_mem_range (i, type_a, type_b, nid, flags, p_start, p_end, p_nid)``h]h)}(hjU h]hK__for_each_mem_range (i, type_a, type_b, nid, flags, p_start, p_end, p_nid)}(hjW hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjS ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhKhj0hhubj )}(hiiterate through memblock areas from type_a and not included in type_b. Or just type_a if type_b is NULL. h]h)}(hhiterate through memblock areas from type_a and not included in type_b. Or just type_a if type_b is NULL.h]hhiterate through memblock areas from type_a and not included in type_b. Or just type_a if type_b is NULL.}(hjo hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhKhjk ubah}(h]h ]h"]h$]h&]uh1j hj} hKhj0hhubj)}(hX**Parameters** ``i`` u64 used as loop variable ``type_a`` ptr to memblock_type to iterate ``type_b`` ptr to memblock_type which excludes from the iteration ``nid`` node selector, ``NUMA_NO_NODE`` for all nodes ``flags`` pick from blocks based on memory attributes ``p_start`` ptr to phys_addr_t for start address of the range, can be ``NULL`` ``p_end`` ptr to phys_addr_t for end address of the range, can be ``NULL`` ``p_nid`` ptr to int for nid of the range, can be ``NULL``h](h)}(h**Parameters**h]j)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhKhj ubj)}(hhh](j)}(h ``i`` u64 used as loop variable h](j)}(h``i``h]h)}(hj h]hi}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhKhj ubj3)}(hhh]h)}(hu64 used as loop variableh]hu64 used as loop variable}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKhj ubah}(h]h ]h"]h$]h&]uh1j2hj ubeh}(h]h ]h"]h$]h&]uh1jhj hKhj ubj)}(h+``type_a`` ptr to memblock_type to iterate h](j)}(h ``type_a``h]h)}(hj h]htype_a}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhKhj ubj3)}(hhh]h)}(hptr to memblock_type to iterateh]hptr to memblock_type to iterate}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKhj ubah}(h]h ]h"]h$]h&]uh1j2hj ubeh}(h]h ]h"]h$]h&]uh1jhj hKhj ubj)}(hB``type_b`` ptr to memblock_type which excludes from the iteration h](j)}(h ``type_b``h]h)}(hjh]htype_b}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhKhjubj3)}(hhh]h)}(h6ptr to memblock_type which excludes from the iterationh]h6ptr to memblock_type which excludes from the iteration}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0hKhj1ubah}(h]h ]h"]h$]h&]uh1j2hjubeh}(h]h ]h"]h$]h&]uh1jhj0hKhj ubj)}(h6``nid`` node selector, ``NUMA_NO_NODE`` for all nodes h](j)}(h``nid``h]h)}(hjTh]hnid}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjRubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhKhjNubj3)}(hhh]h)}(h-node selector, ``NUMA_NO_NODE`` for all nodesh](hnode selector, }(hjmhhhNhNubh)}(h``NUMA_NO_NODE``h]h NUMA_NO_NODE}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjmubh for all nodes}(hjmhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjihKhjjubah}(h]h ]h"]h$]h&]uh1j2hjNubeh}(h]h ]h"]h$]h&]uh1jhjihKhj ubj)}(h6``flags`` pick from blocks based on memory attributes h](j)}(h ``flags``h]h)}(hjh]hflags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhKhjubj3)}(hhh]h)}(h+pick from blocks based on memory attributesh]h+pick from blocks based on memory attributes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j2hjubeh}(h]h ]h"]h$]h&]uh1jhjhKhj ubj)}(hO``p_start`` ptr to phys_addr_t for start address of the range, can be ``NULL`` h](j)}(h ``p_start``h]h)}(hjh]hp_start}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhKhjubj3)}(hhh]h)}(hBptr to phys_addr_t for start address of the range, can be ``NULL``h](h:ptr to phys_addr_t for start address of the range, can be }(hjhhhNhNubh)}(h``NULL``h]hNULL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j2hjubeh}(h]h ]h"]h$]h&]uh1jhjhKhj ubj)}(hK``p_end`` ptr to phys_addr_t for end address of the range, can be ``NULL`` h](j)}(h ``p_end``h]h)}(hjh]hp_end}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhKhjubj3)}(hhh]h)}(h@ptr to phys_addr_t for end address of the range, can be ``NULL``h](h8ptr to phys_addr_t for end address of the range, can be }(hj8hhhNhNubh)}(h``NULL``h]hNULL}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj8ubeh}(h]h ]h"]h$]h&]uh1hhj4hKhj5ubah}(h]h ]h"]h$]h&]uh1j2hjubeh}(h]h ]h"]h$]h&]uh1jhj4hKhj ubj)}(h:``p_nid`` ptr to int for nid of the range, can be ``NULL``h](j)}(h ``p_nid``h]h)}(hjfh]hp_nid}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjdubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhKhj`ubj3)}(hhh]h)}(h0ptr to int for nid of the range, can be ``NULL``h](h(ptr to int for nid of the range, can be }(hjhhhNhNubh)}(h``NULL``h]hNULL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhKhj|ubah}(h]h ]h"]h$]h&]uh1j2hj`ubeh}(h]h ]h"]h$]h&]uh1jhj{hKhj ubeh}(h]h ]h"]h$]h&]uh1j hj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj0hhhNhNubjP)}(hhh]h}(h]h ]h"]h$]h&]entries](j\"__for_each_mem_range_rev (C macro)c.__for_each_mem_range_revhNtauh1jOhj0hhhNhNubja)}(hhh](jf)}(h__for_each_mem_range_revh]jl)}(h__for_each_mem_range_revh]j)}(h__for_each_mem_range_revh]j)}(hjh]h__for_each_mem_range_rev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhKubah}(h]h ]h"]h$]h&]jjjuh1jkjjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jehjhKhjhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](hmacroeh"]h$]h&]jhjjjjjjjuh1j`hhhj0hNhNubh)}(hS``__for_each_mem_range_rev (i, type_a, type_b, nid, flags, p_start, p_end, p_nid)``h]h)}(hjh]hO__for_each_mem_range_rev (i, type_a, type_b, nid, flags, p_start, p_end, p_nid)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhKhj0hhubj )}(hqreverse iterate through memblock areas from type_a and not included in type_b. Or just type_a if type_b is NULL. h]h)}(hpreverse iterate through memblock areas from type_a and not included in type_b. Or just type_a if type_b is NULL.h]hpreverse iterate through memblock areas from type_a and not included in type_b. Or just type_a if type_b is NULL.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhKhjubah}(h]h ]h"]h$]h&]uh1j hj,hKhj0hhubj)}(hX**Parameters** ``i`` u64 used as loop variable ``type_a`` ptr to memblock_type to iterate ``type_b`` ptr to memblock_type which excludes from the iteration ``nid`` node selector, ``NUMA_NO_NODE`` for all nodes ``flags`` pick from blocks based on memory attributes ``p_start`` ptr to phys_addr_t for start address of the range, can be ``NULL`` ``p_end`` ptr to phys_addr_t for end address of the range, can be ``NULL`` ``p_nid`` ptr to int for nid of the range, can be ``NULL``h](h)}(h**Parameters**h]j)}(hj9h]h Parameters}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhKhj3ubj)}(hhh](j)}(h ``i`` u64 used as loop variable h](j)}(h``i``h]h)}(hjXh]hi}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjVubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhKhjRubj3)}(hhh]h)}(hu64 used as loop variableh]hu64 used as loop variable}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjmhKhjnubah}(h]h ]h"]h$]h&]uh1j2hjRubeh}(h]h ]h"]h$]h&]uh1jhjmhKhjOubj)}(h+``type_a`` ptr to memblock_type to iterate h](j)}(h ``type_a``h]h)}(hjh]htype_a}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhKhjubj3)}(hhh]h)}(hptr to memblock_type to iterateh]hptr to memblock_type to iterate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j2hjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjOubj)}(hB``type_b`` ptr to memblock_type which excludes from the iteration h](j)}(h ``type_b``h]h)}(hjh]htype_b}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhKhjubj3)}(hhh]h)}(h6ptr to memblock_type which excludes from the iterationh]h6ptr to memblock_type which excludes from the iteration}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j2hjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjOubj)}(h6``nid`` node selector, ``NUMA_NO_NODE`` for all nodes h](j)}(h``nid``h]h)}(hjh]hnid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhKhjubj3)}(hhh]h)}(h-node selector, ``NUMA_NO_NODE`` for all nodesh](hnode selector, }(hjhhhNhNubh)}(h``NUMA_NO_NODE``h]h NUMA_NO_NODE}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh for all nodes}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j2hjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjOubj)}(h6``flags`` pick from blocks based on memory attributes h](j)}(h ``flags``h]h)}(hjNh]hflags}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjLubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhKhjHubj3)}(hhh]h)}(h+pick from blocks based on memory attributesh]h+pick from blocks based on memory attributes}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1hhjchKhjdubah}(h]h ]h"]h$]h&]uh1j2hjHubeh}(h]h ]h"]h$]h&]uh1jhjchKhjOubj)}(hO``p_start`` ptr to phys_addr_t for start address of the range, can be ``NULL`` h](j)}(h ``p_start``h]h)}(hjh]hp_start}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhKhjubj3)}(hhh]h)}(hBptr to phys_addr_t for start address of the range, can be ``NULL``h](h:ptr to phys_addr_t for start address of the range, can be }(hjhhhNhNubh)}(h``NULL``h]hNULL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j2hjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjOubj)}(hK``p_end`` ptr to phys_addr_t for end address of the range, can be ``NULL`` h](j)}(h ``p_end``h]h)}(hjh]hp_end}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhKhjubj3)}(hhh]h)}(h@ptr to phys_addr_t for end address of the range, can be ``NULL``h](h8ptr to phys_addr_t for end address of the range, can be }(hjhhhNhNubh)}(h``NULL``h]hNULL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j2hjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjOubj)}(h:``p_nid`` ptr to int for nid of the range, can be ``NULL``h](j)}(h ``p_nid``h]h)}(hjh]hp_nid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhKhjubj3)}(hhh]h)}(h0ptr to int for nid of the range, can be ``NULL``h](h(ptr to int for nid of the range, can be }(hj.hhhNhNubh)}(h``NULL``h]hNULL}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj.ubeh}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhKhj+ubah}(h]h ]h"]h$]h&]uh1j2hjubeh}(h]h ]h"]h$]h&]uh1jhj*hKhjOubeh}(h]h ]h"]h$]h&]uh1j hj3ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj0hhhNhNubjP)}(hhh]h}(h]h ]h"]h$]h&]entries](j\for_each_mem_range (C macro)c.for_each_mem_rangehNtauh1jOhj0hhhNhNubja)}(hhh](jf)}(hfor_each_mem_rangeh]jl)}(hfor_each_mem_rangeh]j)}(hfor_each_mem_rangeh]j)}(hjwh]hfor_each_mem_range}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjyhhh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhKubah}(h]h ]h"]h$]h&]jjjuh1jkjjhjuhhhjhKubah}(h]jpah ](jjeh"]h$]h&]jj)jhuh1jehjhKhjrhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjrhhhjhKubeh}(h]h ](hmacroeh"]h$]h&]jhjjjjjjjuh1j`hhhj0hNhNubh)}(h*``for_each_mem_range (i, p_start, p_end)``h]h)}(hjh]h&for_each_mem_range (i, p_start, p_end)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhKhj0hhubj )}(hiterate through memory areas. h]h)}(hiterate through memory areas.h]hiterate through memory areas.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhKhjubah}(h]h ]h"]h$]h&]uh1j hjhKhj0hhubj)}(h**Parameters** ``i`` u64 used as loop variable ``p_start`` ptr to phys_addr_t for start address of the range, can be ``NULL`` ``p_end`` ptr to phys_addr_t for end address of the range, can be ``NULL``h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhKhjubj)}(hhh](j)}(h ``i`` u64 used as loop variable h](j)}(h``i``h]h)}(hjh]hi}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhKhjubj3)}(hhh]h)}(hu64 used as loop variableh]hu64 used as loop variable}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j2hjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(hO``p_start`` ptr to phys_addr_t for start address of the range, can be ``NULL`` h](j)}(h ``p_start``h]h)}(hj@h]hp_start}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj>ubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhKhj:ubj3)}(hhh]h)}(hBptr to phys_addr_t for start address of the range, can be ``NULL``h](h:ptr to phys_addr_t for start address of the range, can be }(hjYhhhNhNubh)}(h``NULL``h]hNULL}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1hhjYubeh}(h]h ]h"]h$]h&]uh1hhjUhKhjVubah}(h]h ]h"]h$]h&]uh1j2hj:ubeh}(h]h ]h"]h$]h&]uh1jhjUhKhjubj)}(hJ``p_end`` ptr to phys_addr_t for end address of the range, can be ``NULL``h](j)}(h ``p_end``h]h)}(hjh]hp_end}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhKhjubj3)}(hhh]h)}(h@ptr to phys_addr_t for end address of the range, can be ``NULL``h](h8ptr to phys_addr_t for end address of the range, can be }(hjhhhNhNubh)}(h``NULL``h]hNULL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhKhjubah}(h]h ]h"]h$]h&]uh1j2hjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubeh}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj0hhhNhNubjP)}(hhh]h}(h]h ]h"]h$]h&]entries](j\ for_each_mem_range_rev (C macro)c.for_each_mem_range_revhNtauh1jOhj0hhhNhNubja)}(hhh](jf)}(hfor_each_mem_range_revh]jl)}(hfor_each_mem_range_revh]j)}(hfor_each_mem_range_revh]j)}(hjh]hfor_each_mem_range_rev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhKubah}(h]h ]h"]h$]h&]jjjuh1jkjjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jehjhKhjhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](hmacroeh"]h$]h&]jhjjjjjjjuh1j`hhhj0hNhNubh)}(h.``for_each_mem_range_rev (i, p_start, p_end)``h]h)}(hj%h]h*for_each_mem_range_rev (i, p_start, p_end)}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj#ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhMhj0hhubj )}(hqreverse iterate through memblock areas from type_a and not included in type_b. Or just type_a if type_b is NULL. h]h)}(hpreverse iterate through memblock areas from type_a and not included in type_b. Or just type_a if type_b is NULL.h]hpreverse iterate through memblock areas from type_a and not included in type_b. Or just type_a if type_b is NULL.}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhKhj;ubah}(h]h ]h"]h$]h&]uh1j hjMhKhj0hhubj)}(h**Parameters** ``i`` u64 used as loop variable ``p_start`` ptr to phys_addr_t for start address of the range, can be ``NULL`` ``p_end`` ptr to phys_addr_t for end address of the range, can be ``NULL``h](h)}(h**Parameters**h]j)}(hjZh]h Parameters}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhMhjTubj)}(hhh](j)}(h ``i`` u64 used as loop variable h](j)}(h``i``h]h)}(hjyh]hi}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjwubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhMhjsubj3)}(hhh]h)}(hu64 used as loop variableh]hu64 used as loop variable}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j2hjsubeh}(h]h ]h"]h$]h&]uh1jhjhMhjpubj)}(hO``p_start`` ptr to phys_addr_t for start address of the range, can be ``NULL`` h](j)}(h ``p_start``h]h)}(hjh]hp_start}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhMhjubj3)}(hhh]h)}(hBptr to phys_addr_t for start address of the range, can be ``NULL``h](h:ptr to phys_addr_t for start address of the range, can be }(hjhhhNhNubh)}(h``NULL``h]hNULL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j2hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjpubj)}(hJ``p_end`` ptr to phys_addr_t for end address of the range, can be ``NULL``h](j)}(h ``p_end``h]h)}(hjh]hp_end}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhMhjubj3)}(hhh]h)}(h@ptr to phys_addr_t for end address of the range, can be ``NULL``h](h8ptr to phys_addr_t for end address of the range, can be }(hjhhhNhNubh)}(h``NULL``h]hNULL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhMhjubah}(h]h ]h"]h$]h&]uh1j2hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjpubeh}(h]h ]h"]h$]h&]uh1j hjTubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj0hhhNhNubjP)}(hhh]h}(h]h ]h"]h$]h&]entries](j\%for_each_reserved_mem_range (C macro)c.for_each_reserved_mem_rangehNtauh1jOhj0hhhNhNubja)}(hhh](jf)}(hfor_each_reserved_mem_rangeh]jl)}(hfor_each_reserved_mem_rangeh]j)}(hfor_each_reserved_mem_rangeh]j)}(hj[h]hfor_each_reserved_mem_range}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubah}(h]h ](jjeh"]h$]h&]jjuh1jhj]hhh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhM ubah}(h]h ]h"]h$]h&]jjjuh1jkjjhjYhhhjxhM ubah}(h]jTah ](jjeh"]h$]h&]jj)jhuh1jehjxhM hjVhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjVhhhjxhM ubeh}(h]h ](hmacroeh"]h$]h&]jhjjjjjjjuh1j`hhhj0hNhNubh)}(h3``for_each_reserved_mem_range (i, p_start, p_end)``h]h)}(hjh]h/for_each_reserved_mem_range (i, p_start, p_end)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhM hj0hhubj )}(h)iterate over all reserved memblock areas h]h)}(h(iterate over all reserved memblock areash]h(iterate over all reserved memblock areas}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhM hjubah}(h]h ]h"]h$]h&]uh1j hjhM hj0hhubj)}(hX8**Parameters** ``i`` u64 used as loop variable ``p_start`` ptr to phys_addr_t for start address of the range, can be ``NULL`` ``p_end`` ptr to phys_addr_t for end address of the range, can be ``NULL`` **Description** Walks over reserved areas of memblock. Available as soon as memblock is initialized.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhMhjubj)}(hhh](j)}(h ``i`` u64 used as loop variable h](j)}(h``i``h]h)}(hjh]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhM hjubj3)}(hhh]h)}(hu64 used as loop variableh]hu64 used as loop variable}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1j2hjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(hO``p_start`` ptr to phys_addr_t for start address of the range, can be ``NULL`` h](j)}(h ``p_start``h]h)}(hj$h]hp_start}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj"ubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhM hjubj3)}(hhh]h)}(hBptr to phys_addr_t for start address of the range, can be ``NULL``h](h:ptr to phys_addr_t for start address of the range, can be }(hj=hhhNhNubh)}(h``NULL``h]hNULL}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj=ubeh}(h]h ]h"]h$]h&]uh1hhj9hM hj:ubah}(h]h ]h"]h$]h&]uh1j2hjubeh}(h]h ]h"]h$]h&]uh1jhj9hM hjubj)}(hK``p_end`` ptr to phys_addr_t for end address of the range, can be ``NULL`` h](j)}(h ``p_end``h]h)}(hjkh]hp_end}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjiubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhM hjeubj3)}(hhh]h)}(h@ptr to phys_addr_t for end address of the range, can be ``NULL``h](h8ptr to phys_addr_t for end address of the range, can be }(hjhhhNhNubh)}(h``NULL``h]hNULL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1j2hjeubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubeh}(h]h ]h"]h$]h&]uh1j hjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhMhjubh)}(hTWalks over reserved areas of memblock. Available as soon as memblock is initialized.h]hTWalks over reserved areas of memblock. Available as soon as memblock is initialized.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj0hhhNhNubjP)}(hhh]h}(h]h ]h"]h$]h&]entries](j\ for_each_mem_pfn_range (C macro)c.for_each_mem_pfn_rangehNtauh1jOhj0hhhNhNubja)}(hhh](jf)}(hfor_each_mem_pfn_rangeh]jl)}(hfor_each_mem_pfn_rangeh]j)}(hfor_each_mem_pfn_rangeh]j)}(hjh]hfor_each_mem_pfn_range}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhM:ubah}(h]h ]h"]h$]h&]jjjuh1jkjjhjhhhjhM:ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jehjhM:hjhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjhhhjhM:ubeh}(h]h ](hmacroeh"]h$]h&]jhjj)jj)jjjuh1j`hhhj0hNhNubh)}(h:``for_each_mem_pfn_range (i, nid, p_start, p_end, p_nid)``h]h)}(hj/h]h6for_each_mem_pfn_range (i, nid, p_start, p_end, p_nid)}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj-ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhM<hj0hhubj )}(h early memory pfn range iterator h]h)}(hearly memory pfn range iteratorh]hearly memory pfn range iterator}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhM:hjEubah}(h]h ]h"]h$]h&]uh1j hjWhM:hj0hhubj)}(hXr**Parameters** ``i`` an integer used as loop variable ``nid`` node selector, ``MAX_NUMNODES`` for all nodes ``p_start`` ptr to ulong for start pfn of the range, can be ``NULL`` ``p_end`` ptr to ulong for end pfn of the range, can be ``NULL`` ``p_nid`` ptr to int for nid of the range, can be ``NULL`` **Description** Walks over configured memory ranges.h](h)}(h**Parameters**h]j)}(hjdh]h Parameters}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhM>hj^ubj)}(hhh](j)}(h'``i`` an integer used as loop variable h](j)}(h``i``h]h)}(hjh]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhM;hj}ubj3)}(hhh]h)}(h an integer used as loop variableh]h an integer used as loop variable}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM;hjubah}(h]h ]h"]h$]h&]uh1j2hj}ubeh}(h]h ]h"]h$]h&]uh1jhjhM;hjzubj)}(h6``nid`` node selector, ``MAX_NUMNODES`` for all nodes h](j)}(h``nid``h]h)}(hjh]hnid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhM<hjubj3)}(hhh]h)}(h-node selector, ``MAX_NUMNODES`` for all nodesh](hnode selector, }(hjhhhNhNubh)}(h``MAX_NUMNODES``h]h MAX_NUMNODES}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh for all nodes}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhM<hjubah}(h]h ]h"]h$]h&]uh1j2hjubeh}(h]h ]h"]h$]h&]uh1jhjhM<hjzubj)}(hE``p_start`` ptr to ulong for start pfn of the range, can be ``NULL`` h](j)}(h ``p_start``h]h)}(hjh]hp_start}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhM=hjubj3)}(hhh]h)}(h8ptr to ulong for start pfn of the range, can be ``NULL``h](h0ptr to ulong for start pfn of the range, can be }(hj hhhNhNubh)}(h``NULL``h]hNULL}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]uh1hhjhM=hjubah}(h]h ]h"]h$]h&]uh1j2hjubeh}(h]h ]h"]h$]h&]uh1jhjhM=hjzubj)}(hA``p_end`` ptr to ulong for end pfn of the range, can be ``NULL`` h](j)}(h ``p_end``h]h)}(hjNh]hp_end}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjLubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhM>hjHubj3)}(hhh]h)}(h6ptr to ulong for end pfn of the range, can be ``NULL``h](h.ptr to ulong for end pfn of the range, can be }(hjghhhNhNubh)}(h``NULL``h]hNULL}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1hhjgubeh}(h]h ]h"]h$]h&]uh1hhjchM>hjdubah}(h]h ]h"]h$]h&]uh1j2hjHubeh}(h]h ]h"]h$]h&]uh1jhjchM>hjzubj)}(h;``p_nid`` ptr to int for nid of the range, can be ``NULL`` h](j)}(h ``p_nid``h]h)}(hjh]hp_nid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhM?hjubj3)}(hhh]h)}(h0ptr to int for nid of the range, can be ``NULL``h](h(ptr to int for nid of the range, can be }(hjhhhNhNubh)}(h``NULL``h]hNULL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]uh1hhjhM?hjubah}(h]h ]h"]h$]h&]uh1j2hjubeh}(h]h ]h"]h$]h&]uh1jhjhM?hjzubeh}(h]h ]h"]h$]h&]uh1j hj^ubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhMAhj^ubh)}(h$Walks over configured memory ranges.h]h$Walks over configured memory ranges.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhM@hj^ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj0hhhNhNubjP)}(hhh]h}(h]h ]h"]h$]h&]entries](j\2for_each_free_mem_pfn_range_in_zone_from (C macro)*c.for_each_free_mem_pfn_range_in_zone_fromhNtauh1jOhj0hhhNhNubja)}(hhh](jf)}(h(for_each_free_mem_pfn_range_in_zone_fromh]jl)}(h(for_each_free_mem_pfn_range_in_zone_fromh]j)}(h(for_each_free_mem_pfn_range_in_zone_fromh]j)}(hjh]h(for_each_free_mem_pfn_range_in_zone_from}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhMMubah}(h]h ]h"]h$]h&]jjjuh1jkjjhjhhhj:hMMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jehj:hMMhjhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjhhhj:hMMubeh}(h]h ](hmacroeh"]h$]h&]jhjjSjjSjjjuh1j`hhhj0hNhNubh)}(hF``for_each_free_mem_pfn_range_in_zone_from (i, zone, p_start, p_end)``h]h)}(hjYh]hBfor_each_free_mem_pfn_range_in_zone_from (i, zone, p_start, p_end)}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjWubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhMOhj0hhubj )}(hEiterate through zone specific free memblock areas from a given point h]h)}(hDiterate through zone specific free memblock areas from a given pointh]hDiterate through zone specific free memblock areas from a given point}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhMMhjoubah}(h]h ]h"]h$]h&]uh1j hjhMMhj0hhubj)}(hX**Parameters** ``i`` u64 used as loop variable ``zone`` zone in which all of the memory blocks reside ``p_start`` ptr to phys_addr_t for start address of the range, can be ``NULL`` ``p_end`` ptr to phys_addr_t for end address of the range, can be ``NULL`` **Description** Walks over free (memory && !reserved) areas of memblock in a specific zone, continuing from current position. Available as soon as memblock is initialized.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhMQhjubj)}(hhh](j)}(h ``i`` u64 used as loop variable h](j)}(h``i``h]h)}(hjh]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhMOhjubj3)}(hhh]h)}(hu64 used as loop variableh]hu64 used as loop variable}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMOhjubah}(h]h ]h"]h$]h&]uh1j2hjubeh}(h]h ]h"]h$]h&]uh1jhjhMOhjubj)}(h7``zone`` zone in which all of the memory blocks reside h](j)}(h``zone``h]h)}(hjh]hzone}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhMPhjubj3)}(hhh]h)}(h-zone in which all of the memory blocks resideh]h-zone in which all of the memory blocks reside}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMPhjubah}(h]h ]h"]h$]h&]uh1j2hjubeh}(h]h ]h"]h$]h&]uh1jhjhMPhjubj)}(hO``p_start`` ptr to phys_addr_t for start address of the range, can be ``NULL`` h](j)}(h ``p_start``h]h)}(hjh]hp_start}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhMQhjubj3)}(hhh]h)}(hBptr to phys_addr_t for start address of the range, can be ``NULL``h](h:ptr to phys_addr_t for start address of the range, can be }(hj8hhhNhNubh)}(h``NULL``h]hNULL}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj8ubeh}(h]h ]h"]h$]h&]uh1hhj4hMQhj5ubah}(h]h ]h"]h$]h&]uh1j2hjubeh}(h]h ]h"]h$]h&]uh1jhj4hMQhjubj)}(hK``p_end`` ptr to phys_addr_t for end address of the range, can be ``NULL`` h](j)}(h ``p_end``h]h)}(hjfh]hp_end}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjdubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhMRhj`ubj3)}(hhh]h)}(h@ptr to phys_addr_t for end address of the range, can be ``NULL``h](h8ptr to phys_addr_t for end address of the range, can be }(hjhhhNhNubh)}(h``NULL``h]hNULL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]uh1hhj{hMRhj|ubah}(h]h ]h"]h$]h&]uh1j2hj`ubeh}(h]h ]h"]h$]h&]uh1jhj{hMRhjubeh}(h]h ]h"]h$]h&]uh1j hjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhMThjubh)}(hWalks over free (memory && !reserved) areas of memblock in a specific zone, continuing from current position. Available as soon as memblock is initialized.h]hWalks over free (memory && !reserved) areas of memblock in a specific zone, continuing from current position. Available as soon as memblock is initialized.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhMShjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj0hhhNhNubjP)}(hhh]h}(h]h ]h"]h$]h&]entries](j\!for_each_free_mem_range (C macro)c.for_each_free_mem_rangehNtauh1jOhj0hhhNhNubja)}(hhh](jf)}(hfor_each_free_mem_rangeh]jl)}(hfor_each_free_mem_rangeh]j)}(hfor_each_free_mem_rangeh]j)}(hjh]hfor_each_free_mem_range}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhM_ubah}(h]h ]h"]h$]h&]jjjuh1jkjjhjhhhj hM_ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jehj hM_hjhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjhhhj hM_ubeh}(h]h ](hmacroeh"]h$]h&]jhjj$jj$jjjuh1j`hhhj0hNhNubh)}(hB``for_each_free_mem_range (i, nid, flags, p_start, p_end, p_nid)``h]h)}(hj*h]h>for_each_free_mem_range (i, nid, flags, p_start, p_end, p_nid)}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj(ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhMahj0hhubj )}(h$iterate through free memblock areas h]h)}(h#iterate through free memblock areash]h#iterate through free memblock areas}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhM_hj@ubah}(h]h ]h"]h$]h&]uh1j hjRhM_hj0hhubj)}(hX**Parameters** ``i`` u64 used as loop variable ``nid`` node selector, ``NUMA_NO_NODE`` for all nodes ``flags`` pick from blocks based on memory attributes ``p_start`` ptr to phys_addr_t for start address of the range, can be ``NULL`` ``p_end`` ptr to phys_addr_t for end address of the range, can be ``NULL`` ``p_nid`` ptr to int for nid of the range, can be ``NULL`` **Description** Walks over free (memory && !reserved) areas of memblock. Available as soon as memblock is initialized.h](h)}(h**Parameters**h]j)}(hj_h]h Parameters}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhMchjYubj)}(hhh](j)}(h ``i`` u64 used as loop variable h](j)}(h``i``h]h)}(hj~h]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj|ubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhM`hjxubj3)}(hhh]h)}(hu64 used as loop variableh]hu64 used as loop variable}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM`hjubah}(h]h ]h"]h$]h&]uh1j2hjxubeh}(h]h ]h"]h$]h&]uh1jhjhM`hjuubj)}(h6``nid`` node selector, ``NUMA_NO_NODE`` for all nodes h](j)}(h``nid``h]h)}(hjh]hnid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhMahjubj3)}(hhh]h)}(h-node selector, ``NUMA_NO_NODE`` for all nodesh](hnode selector, }(hjhhhNhNubh)}(h``NUMA_NO_NODE``h]h NUMA_NO_NODE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh for all nodes}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMahjubah}(h]h ]h"]h$]h&]uh1j2hjubeh}(h]h ]h"]h$]h&]uh1jhjhMahjuubj)}(h6``flags`` pick from blocks based on memory attributes h](j)}(h ``flags``h]h)}(hjh]hflags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhMbhjubj3)}(hhh]h)}(h+pick from blocks based on memory attributesh]h+pick from blocks based on memory attributes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMbhjubah}(h]h ]h"]h$]h&]uh1j2hjubeh}(h]h ]h"]h$]h&]uh1jhjhMbhjuubj)}(hO``p_start`` ptr to phys_addr_t for start address of the range, can be ``NULL`` h](j)}(h ``p_start``h]h)}(hj;h]hp_start}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj9ubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhMchj5ubj3)}(hhh]h)}(hBptr to phys_addr_t for start address of the range, can be ``NULL``h](h:ptr to phys_addr_t for start address of the range, can be }(hjThhhNhNubh)}(h``NULL``h]hNULL}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjTubeh}(h]h ]h"]h$]h&]uh1hhjPhMchjQubah}(h]h ]h"]h$]h&]uh1j2hj5ubeh}(h]h ]h"]h$]h&]uh1jhjPhMchjuubj)}(hK``p_end`` ptr to phys_addr_t for end address of the range, can be ``NULL`` h](j)}(h ``p_end``h]h)}(hjh]hp_end}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhMdhj|ubj3)}(hhh]h)}(h@ptr to phys_addr_t for end address of the range, can be ``NULL``h](h8ptr to phys_addr_t for end address of the range, can be }(hjhhhNhNubh)}(h``NULL``h]hNULL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]uh1hhjhMdhjubah}(h]h ]h"]h$]h&]uh1j2hj|ubeh}(h]h ]h"]h$]h&]uh1jhjhMdhjuubj)}(h;``p_nid`` ptr to int for nid of the range, can be ``NULL`` h](j)}(h ``p_nid``h]h)}(hjh]hp_nid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhMehjubj3)}(hhh]h)}(h0ptr to int for nid of the range, can be ``NULL``h](h(ptr to int for nid of the range, can be }(hjhhhNhNubh)}(h``NULL``h]hNULL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]uh1hhjhMehjubah}(h]h ]h"]h$]h&]uh1j2hjubeh}(h]h ]h"]h$]h&]uh1jhjhMehjuubeh}(h]h ]h"]h$]h&]uh1j hjYubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhMghjYubh)}(hgWalks over free (memory && !reserved) areas of memblock. Available as soon as memblock is initialized.h]hgWalks over free (memory && !reserved) areas of memblock. Available as soon as memblock is initialized.}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhMfhjYubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj0hhhNhNubjP)}(hhh]h}(h]h ]h"]h$]h&]entries](j\)for_each_free_mem_range_reverse (C macro)!c.for_each_free_mem_range_reversehNtauh1jOhj0hhhNhNubja)}(hhh](jf)}(hfor_each_free_mem_range_reverseh]jl)}(hfor_each_free_mem_range_reverseh]j)}(hfor_each_free_mem_range_reverseh]j)}(hjQh]hfor_each_free_mem_range_reverse}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubah}(h]h ](jjeh"]h$]h&]jjuh1jhjShhh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhMoubah}(h]h ]h"]h$]h&]jjjuh1jkjjhjOhhhjnhMoubah}(h]jJah ](jjeh"]h$]h&]jj)jhuh1jehjnhMohjLhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjLhhhjnhMoubeh}(h]h ](hmacroeh"]h$]h&]jhjjjjjjjuh1j`hhhj0hNhNubh)}(hJ``for_each_free_mem_range_reverse (i, nid, flags, p_start, p_end, p_nid)``h]h)}(hjh]hFfor_each_free_mem_range_reverse (i, nid, flags, p_start, p_end, p_nid)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhMqhj0hhubj )}(h(rev-iterate through free memblock areas h]h)}(h'rev-iterate through free memblock areash]h'rev-iterate through free memblock areas}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhMohjubah}(h]h ]h"]h$]h&]uh1j hjhMohj0hhubj)}(hX **Parameters** ``i`` u64 used as loop variable ``nid`` node selector, ``NUMA_NO_NODE`` for all nodes ``flags`` pick from blocks based on memory attributes ``p_start`` ptr to phys_addr_t for start address of the range, can be ``NULL`` ``p_end`` ptr to phys_addr_t for end address of the range, can be ``NULL`` ``p_nid`` ptr to int for nid of the range, can be ``NULL`` **Description** Walks over free (memory && !reserved) areas of memblock in reverse order. Available as soon as memblock is initialized.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhMshjubj)}(hhh](j)}(h ``i`` u64 used as loop variable h](j)}(h``i``h]h)}(hjh]hi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhMphjubj3)}(hhh]h)}(hu64 used as loop variableh]hu64 used as loop variable}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMphjubah}(h]h ]h"]h$]h&]uh1j2hjubeh}(h]h ]h"]h$]h&]uh1jhjhMphjubj)}(h6``nid`` node selector, ``NUMA_NO_NODE`` for all nodes h](j)}(h``nid``h]h)}(hjh]hnid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhMqhjubj3)}(hhh]h)}(h-node selector, ``NUMA_NO_NODE`` for all nodesh](hnode selector, }(hj3hhhNhNubh)}(h``NUMA_NO_NODE``h]h NUMA_NO_NODE}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj3ubh for all nodes}(hj3hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj/hMqhj0ubah}(h]h ]h"]h$]h&]uh1j2hjubeh}(h]h ]h"]h$]h&]uh1jhj/hMqhjubj)}(h6``flags`` pick from blocks based on memory attributes h](j)}(h ``flags``h]h)}(hjeh]hflags}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1hhjcubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhMrhj_ubj3)}(hhh]h)}(h+pick from blocks based on memory attributesh]h+pick from blocks based on memory attributes}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjzhMrhj{ubah}(h]h ]h"]h$]h&]uh1j2hj_ubeh}(h]h ]h"]h$]h&]uh1jhjzhMrhjubj)}(hO``p_start`` ptr to phys_addr_t for start address of the range, can be ``NULL`` h](j)}(h ``p_start``h]h)}(hjh]hp_start}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhMshjubj3)}(hhh]h)}(hBptr to phys_addr_t for start address of the range, can be ``NULL``h](h:ptr to phys_addr_t for start address of the range, can be }(hjhhhNhNubh)}(h``NULL``h]hNULL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]uh1hhjhMshjubah}(h]h ]h"]h$]h&]uh1j2hjubeh}(h]h ]h"]h$]h&]uh1jhjhMshjubj)}(hK``p_end`` ptr to phys_addr_t for end address of the range, can be ``NULL`` h](j)}(h ``p_end``h]h)}(hjh]hp_end}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhMthjubj3)}(hhh]h)}(h@ptr to phys_addr_t for end address of the range, can be ``NULL``h](h8ptr to phys_addr_t for end address of the range, can be }(hjhhhNhNubh)}(h``NULL``h]hNULL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]uh1hhjhMthjubah}(h]h ]h"]h$]h&]uh1j2hjubeh}(h]h ]h"]h$]h&]uh1jhjhMthjubj)}(h;``p_nid`` ptr to int for nid of the range, can be ``NULL`` h](j)}(h ``p_nid``h]h)}(hj,h]hp_nid}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj*ubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhMuhj&ubj3)}(hhh]h)}(h0ptr to int for nid of the range, can be ``NULL``h](h(ptr to int for nid of the range, can be }(hjEhhhNhNubh)}(h``NULL``h]hNULL}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjEubeh}(h]h ]h"]h$]h&]uh1hhjAhMuhjBubah}(h]h ]h"]h$]h&]uh1j2hj&ubeh}(h]h ]h"]h$]h&]uh1jhjAhMuhjubeh}(h]h ]h"]h$]h&]uh1j hjubh)}(h**Description**h]j)}(hjuh]h Description}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhMwhjubh)}(hxWalks over free (memory && !reserved) areas of memblock in reverse order. Available as soon as memblock is initialized.h]hxWalks over free (memory && !reserved) areas of memblock in reverse order. Available as soon as memblock is initialized.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhMvhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj0hhhNhNubjP)}(hhh]h}(h]h ]h"]h$]h&]entries](j\'memblock_set_current_limit (C function)c.memblock_set_current_limithNtauh1jOhj0hhhNhNubja)}(hhh](jf)}(h3void memblock_set_current_limit (phys_addr_t limit)h]jl)}(h2void memblock_set_current_limit(phys_addr_t limit)h](hdesc_sig_keyword_type)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]ktah"]h$]h&]uh1jhjhhh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhM ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM ubj)}(hmemblock_set_current_limith]j)}(hmemblock_set_current_limith]hmemblock_set_current_limit}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhM ubhdesc_parameterlist)}(h(phys_addr_t limit)h]hdesc_parameter)}(hphys_addr_t limith](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainhreftype identifier reftargetj modnameN classnameN c:parent_keysphinx.domains.c LookupKey)}data]j ASTIdentifier)}j jsbc.memblock_set_current_limitasbuh1hhjubj)}(h h]h }(hj) hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hlimith]hlimit}(hj7 hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhM ubeh}(h]h ]h"]h$]h&]jjjuh1jkjjhjhhhjhM ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jehjhM hjhhubj)}(hhh]h)}(hjSet the current allocation limit to allow limiting allocations to what is currently accessible during booth]hjSet the current allocation limit to allow limiting allocations to what is currently accessible during boot}(hja hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhM hj^ hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM ubeh}(h]h ](hfunctioneh"]h$]h&]jhjjy jjy jjjuh1j`hhhj0hNhNubj)}(hJ**Parameters** ``phys_addr_t limit`` New limit value (physical address)h](h)}(h**Parameters**h]j)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhMhj} ubj)}(hhh]j)}(h8``phys_addr_t limit`` New limit value (physical address)h](j)}(h``phys_addr_t limit``h]h)}(hj h]hphys_addr_t limit}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhMhj ubj3)}(hhh]h)}(h"New limit value (physical address)h]h"New limit value (physical address)}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhMhj ubah}(h]h ]h"]h$]h&]uh1j2hj ubeh}(h]h ]h"]h$]h&]uh1jhj hMhj ubah}(h]h ]h"]h$]h&]uh1j hj} ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj0hhhNhNubjP)}(hhh]h}(h]h ]h"]h$]h&]entries](j\,memblock_region_memory_base_pfn (C function)!c.memblock_region_memory_base_pfnhNtauh1jOhj0hhhNhNubja)}(hhh](jf)}(hQunsigned long memblock_region_memory_base_pfn (const struct memblock_region *reg)h]jl)}(hPunsigned long memblock_region_memory_base_pfn(const struct memblock_region *reg)h](j)}(hunsignedh]hunsigned}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhM ubj)}(h h]h }(hj !hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhj !hM ubj)}(hlongh]hlong}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhj !hM ubj)}(h h]h }(hj'!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhj !hM ubj)}(hmemblock_region_memory_base_pfnh]j)}(hmemblock_region_memory_base_pfnh]hmemblock_region_memory_base_pfn}(hj9!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5!ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj hhhj !hM ubj)}(h#(const struct memblock_region *reg)h]j)}(h!const struct memblock_region *regh](jr)}(hconsth]hconst}(hjU!hhhNhNubah}(h]h ]j~ah"]h$]h&]uh1jqhjQ!ubj)}(h h]h }(hjc!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQ!ubjr)}(hjh]hstruct}(hjq!hhhNhNubah}(h]h ]j~ah"]h$]h&]uh1jqhjQ!ubj)}(h h]h }(hj~!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQ!ubh)}(hhh]j)}(hmemblock_regionh]hmemblock_region}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetj!modnameN classnameNj j )}j! ]j$ )}j j;!sb!c.memblock_region_memory_base_pfnasbuh1hhjQ!ubj)}(h h]h }(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQ!ubhdesc_sig_punctuation)}(hj$h]h*}(hj!hhhNhNubah}(h]h ]pah"]h$]h&]uh1j!hjQ!ubj)}(hregh]hreg}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQ!ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjM!ubah}(h]h ]h"]h$]h&]jjuh1jhj hhhj !hM ubeh}(h]h ]h"]h$]h&]jjjuh1jkjjhj hhhj !hM ubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1jehj !hM hj hhubj)}(hhh]h)}(h'get the lowest pfn of the memory regionh]h'get the lowest pfn of the memory region}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhM hj!hhubah}(h]h ]h"]h$]h&]uh1jhj hhhj !hM ubeh}(h]h ](hfunctioneh"]h$]h&]jhjj"jj"jjjuh1j`hhhj0hNhNubj)}(h**Parameters** ``const struct memblock_region *reg`` memblock_region structure **Return** the lowest pfn intersecting with the memory regionh](h)}(h**Parameters**h]j)}(hj"h]h Parameters}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhM$hj"ubj)}(hhh]j)}(h@``const struct memblock_region *reg`` memblock_region structure h](j)}(h%``const struct memblock_region *reg``h]h)}(hj8"h]h!const struct memblock_region *reg}(hj:"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj6"ubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhM!hj2"ubj3)}(hhh]h)}(hmemblock_region structureh]hmemblock_region structure}(hjQ"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjM"hM!hjN"ubah}(h]h ]h"]h$]h&]uh1j2hj2"ubeh}(h]h ]h"]h$]h&]uh1jhjM"hM!hj/"ubah}(h]h ]h"]h$]h&]uh1j hj"ubh)}(h **Return**h]j)}(hjs"h]hReturn}(hju"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjq"ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhM#hj"ubh)}(h2the lowest pfn intersecting with the memory regionh]h2the lowest pfn intersecting with the memory region}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhM#hj"ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj0hhhNhNubjP)}(hhh]h}(h]h ]h"]h$]h&]entries](j\+memblock_region_memory_end_pfn (C function) c.memblock_region_memory_end_pfnhNtauh1jOhj0hhhNhNubja)}(hhh](jf)}(hPunsigned long memblock_region_memory_end_pfn (const struct memblock_region *reg)h]jl)}(hOunsigned long memblock_region_memory_end_pfn(const struct memblock_region *reg)h](j)}(hunsignedh]hunsigned}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"hhh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhM+ubj)}(h h]h }(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"hhhj"hM+ubj)}(hlongh]hlong}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"hhhj"hM+ubj)}(h h]h }(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"hhhj"hM+ubj)}(hmemblock_region_memory_end_pfnh]j)}(hmemblock_region_memory_end_pfnh]hmemblock_region_memory_end_pfn}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj"hhhj"hM+ubj)}(h#(const struct memblock_region *reg)h]j)}(h!const struct memblock_region *regh](jr)}(hjW!h]hconst}(hj#hhhNhNubah}(h]h ]j~ah"]h$]h&]uh1jqhj #ubj)}(h h]h }(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj #ubjr)}(hjh]hstruct}(hj,#hhhNhNubah}(h]h ]j~ah"]h$]h&]uh1jqhj #ubj)}(h h]h }(hj9#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj #ubh)}(hhh]j)}(hmemblock_regionh]hmemblock_region}(hjJ#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjG#ubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetjL#modnameN classnameNj j )}j! ]j$ )}j j"sb c.memblock_region_memory_end_pfnasbuh1hhj #ubj)}(h h]h }(hjj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj #ubj!)}(hj$h]h*}(hjx#hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1j!hj #ubj)}(hregh]hreg}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj #ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj #ubah}(h]h ]h"]h$]h&]jjuh1jhj"hhhj"hM+ubeh}(h]h ]h"]h$]h&]jjjuh1jkjjhj"hhhj"hM+ubah}(h]j"ah ](jjeh"]h$]h&]jj)jhuh1jehj"hM+hj"hhubj)}(hhh]h)}(h$get the end pfn of the memory regionh]h$get the end pfn of the memory region}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhM+hj#hhubah}(h]h ]h"]h$]h&]uh1jhj"hhhj"hM+ubeh}(h]h ](hfunctioneh"]h$]h&]jhjj#jj#jjjuh1j`hhhj0hNhNubj)}(h**Parameters** ``const struct memblock_region *reg`` memblock_region structure **Return** the end_pfn of the reserved regionh](h)}(h**Parameters**h]j)}(hj#h]h Parameters}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhM/hj#ubj)}(hhh]j)}(h@``const struct memblock_region *reg`` memblock_region structure h](j)}(h%``const struct memblock_region *reg``h]h)}(hj#h]h!const struct memblock_region *reg}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj#ubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhM,hj#ubj3)}(hhh]h)}(hmemblock_region structureh]hmemblock_region structure}(hj $hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj$hM,hj$ubah}(h]h ]h"]h$]h&]uh1j2hj#ubeh}(h]h ]h"]h$]h&]uh1jhj$hM,hj#ubah}(h]h ]h"]h$]h&]uh1j hj#ubh)}(h **Return**h]j)}(hj+$h]hReturn}(hj-$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)$ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhM.hj#ubh)}(h"the end_pfn of the reserved regionh]h"the end_pfn of the reserved region}(hjA$hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhM.hj#ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj0hhhNhNubjP)}(hhh]h}(h]h ]h"]h$]h&]entries](j\.memblock_region_reserved_base_pfn (C function)#c.memblock_region_reserved_base_pfnhNtauh1jOhj0hhhNhNubja)}(hhh](jf)}(hSunsigned long memblock_region_reserved_base_pfn (const struct memblock_region *reg)h]jl)}(hRunsigned long memblock_region_reserved_base_pfn(const struct memblock_region *reg)h](j)}(hunsignedh]hunsigned}(hjp$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjl$hhh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhM6ubj)}(h h]h }(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjl$hhhj~$hM6ubj)}(hlongh]hlong}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjl$hhhj~$hM6ubj)}(h h]h }(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjl$hhhj~$hM6ubj)}(h!memblock_region_reserved_base_pfnh]j)}(h!memblock_region_reserved_base_pfnh]h!memblock_region_reserved_base_pfn}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjl$hhhj~$hM6ubj)}(h#(const struct memblock_region *reg)h]j)}(h!const struct memblock_region *regh](jr)}(hjW!h]hconst}(hj$hhhNhNubah}(h]h ]j~ah"]h$]h&]uh1jqhj$ubj)}(h h]h }(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubjr)}(hjh]hstruct}(hj$hhhNhNubah}(h]h ]j~ah"]h$]h&]uh1jqhj$ubj)}(h h]h }(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubh)}(hhh]j)}(hmemblock_regionh]hmemblock_region}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetj%modnameN classnameNj j )}j! ]j$ )}j j$sb#c.memblock_region_reserved_base_pfnasbuh1hhj$ubj)}(h h]h }(hj"%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubj!)}(hj$h]h*}(hj0%hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1j!hj$ubj)}(hregh]hreg}(hj=%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj$ubah}(h]h ]h"]h$]h&]jjuh1jhjl$hhhj~$hM6ubeh}(h]h ]h"]h$]h&]jjjuh1jkjjhjh$hhhj~$hM6ubah}(h]jc$ah ](jjeh"]h$]h&]jj)jhuh1jehj~$hM6hje$hhubj)}(hhh]h)}(h)get the lowest pfn of the reserved regionh]h)get the lowest pfn of the reserved region}(hjg%hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhM6hjd%hhubah}(h]h ]h"]h$]h&]uh1jhje$hhhj~$hM6ubeh}(h]h ](hfunctioneh"]h$]h&]jhjj%jj%jjjuh1j`hhhj0hNhNubj)}(h**Parameters** ``const struct memblock_region *reg`` memblock_region structure **Return** the lowest pfn intersecting with the reserved regionh](h)}(h**Parameters**h]j)}(hj%h]h Parameters}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhM:hj%ubj)}(hhh]j)}(h@``const struct memblock_region *reg`` memblock_region structure h](j)}(h%``const struct memblock_region *reg``h]h)}(hj%h]h!const struct memblock_region *reg}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj%ubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhM7hj%ubj3)}(hhh]h)}(hmemblock_region structureh]hmemblock_region structure}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj%hM7hj%ubah}(h]h ]h"]h$]h&]uh1j2hj%ubeh}(h]h ]h"]h$]h&]uh1jhj%hM7hj%ubah}(h]h ]h"]h$]h&]uh1j hj%ubh)}(h **Return**h]j)}(hj%h]hReturn}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhM9hj%ubh)}(h4the lowest pfn intersecting with the reserved regionh]h4the lowest pfn intersecting with the reserved region}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhM9hj%ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj0hhhNhNubjP)}(hhh]h}(h]h ]h"]h$]h&]entries](j\-memblock_region_reserved_end_pfn (C function)"c.memblock_region_reserved_end_pfnhNtauh1jOhj0hhhNhNubja)}(hhh](jf)}(hRunsigned long memblock_region_reserved_end_pfn (const struct memblock_region *reg)h]jl)}(hQunsigned long memblock_region_reserved_end_pfn(const struct memblock_region *reg)h](j)}(hunsignedh]hunsigned}(hj(&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$&hhh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhMAubj)}(h h]h }(hj7&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$&hhhj6&hMAubj)}(hlongh]hlong}(hjE&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$&hhhj6&hMAubj)}(h h]h }(hjS&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$&hhhj6&hMAubj)}(h memblock_region_reserved_end_pfnh]j)}(h memblock_region_reserved_end_pfnh]h memblock_region_reserved_end_pfn}(hje&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhja&ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj$&hhhj6&hMAubj)}(h#(const struct memblock_region *reg)h]j)}(h!const struct memblock_region *regh](jr)}(hjW!h]hconst}(hj&hhhNhNubah}(h]h ]j~ah"]h$]h&]uh1jqhj}&ubj)}(h h]h }(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}&ubjr)}(hjh]hstruct}(hj&hhhNhNubah}(h]h ]j~ah"]h$]h&]uh1jqhj}&ubj)}(h h]h }(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}&ubh)}(hhh]j)}(hmemblock_regionh]hmemblock_region}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetj&modnameN classnameNj j )}j! ]j$ )}j jg&sb"c.memblock_region_reserved_end_pfnasbuh1hhj}&ubj)}(h h]h }(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}&ubj!)}(hj$h]h*}(hj&hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1j!hj}&ubj)}(hregh]hreg}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}&ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjy&ubah}(h]h ]h"]h$]h&]jjuh1jhj$&hhhj6&hMAubeh}(h]h ]h"]h$]h&]jjjuh1jkjjhj &hhhj6&hMAubah}(h]j&ah ](jjeh"]h$]h&]jj)jhuh1jehj6&hMAhj&hhubj)}(hhh]h)}(h&get the end pfn of the reserved regionh]h&get the end pfn of the reserved region}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhMAhj'hhubah}(h]h ]h"]h$]h&]uh1jhj&hhhj6&hMAubeh}(h]h ](hfunctioneh"]h$]h&]jhjj7'jj7'jjjuh1j`hhhj0hNhNubj)}(h**Parameters** ``const struct memblock_region *reg`` memblock_region structure **Return** the end_pfn of the reserved regionh](h)}(h**Parameters**h]j)}(hjA'h]h Parameters}(hjC'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?'ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhMEhj;'ubj)}(hhh]j)}(h@``const struct memblock_region *reg`` memblock_region structure h](j)}(h%``const struct memblock_region *reg``h]h)}(hj`'h]h!const struct memblock_region *reg}(hjb'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj^'ubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhMBhjZ'ubj3)}(hhh]h)}(hmemblock_region structureh]hmemblock_region structure}(hjy'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhju'hMBhjv'ubah}(h]h ]h"]h$]h&]uh1j2hjZ'ubeh}(h]h ]h"]h$]h&]uh1jhju'hMBhjW'ubah}(h]h ]h"]h$]h&]uh1j hj;'ubh)}(h **Return**h]j)}(hj'h]hReturn}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhMDhj;'ubh)}(h"the end_pfn of the reserved regionh]h"the end_pfn of the reserved region}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhMDhj;'ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj0hhhNhNubjP)}(hhh]h}(h]h ]h"]h$]h&]entries](j\for_each_mem_region (C macro)c.for_each_mem_regionhNtauh1jOhj0hhhNhNubja)}(hhh](jf)}(hfor_each_mem_regionh]jl)}(hfor_each_mem_regionh]j)}(hfor_each_mem_regionh]j)}(hj'h]hfor_each_mem_region}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj'hhh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhMLubah}(h]h ]h"]h$]h&]jjjuh1jkjjhj'hhhj'hMLubah}(h]j'ah ](jjeh"]h$]h&]jj)jhuh1jehj'hMLhj'hhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj'hhhj'hMLubeh}(h]h ](hmacroeh"]h$]h&]jhjj(jj(jjjuh1j`hhhj0hNhNubh)}(h ``for_each_mem_region (region)``h]h)}(hj(h]hfor_each_mem_region (region)}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj(ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhMNhj0hhubj )}(hiterate over memory regions h]h)}(hiterate over memory regionsh]hiterate over memory regions}(hj0(hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhMLhj,(ubah}(h]h ]h"]h$]h&]uh1j hj>(hMLhj0hhubj)}(h***Parameters** ``region`` loop variableh](h)}(h**Parameters**h]j)}(hjK(h]h Parameters}(hjM(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjI(ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhMPhjE(ubj)}(hhh]j)}(h``region`` loop variableh](j)}(h ``region``h]h)}(hjj(h]hregion}(hjl(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjh(ubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhMRhjd(ubj3)}(hhh]h)}(h loop variableh]h loop variable}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhMMhj(ubah}(h]h ]h"]h$]h&]uh1j2hjd(ubeh}(h]h ]h"]h$]h&]uh1jhj(hMRhja(ubah}(h]h ]h"]h$]h&]uh1j hjE(ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj0hhhNhNubjP)}(hhh]h}(h]h ]h"]h$]h&]entries](j\&for_each_reserved_mem_region (C macro)c.for_each_reserved_mem_regionhNtauh1jOhj0hhhNhNubja)}(hhh](jf)}(hfor_each_reserved_mem_regionh]jl)}(hfor_each_reserved_mem_regionh]j)}(hfor_each_reserved_mem_regionh]j)}(hj(h]hfor_each_reserved_mem_region}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj(hhh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhMUubah}(h]h ]h"]h$]h&]jjjuh1jkjjhj(hhhj(hMUubah}(h]j(ah ](jjeh"]h$]h&]jj)jhuh1jehj(hMUhj(hhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj(hhhj(hMUubeh}(h]h ](hmacroeh"]h$]h&]jhjj(jj(jjjuh1j`hhhj0hNhNubh)}(h)``for_each_reserved_mem_region (region)``h]h)}(hj(h]h%for_each_reserved_mem_region (region)}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj(ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhMWhj0hhubj )}(h&itereate over reserved memory regions h]h)}(h%itereate over reserved memory regionsh]h%itereate over reserved memory regions}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhMUhj)ubah}(h]h ]h"]h$]h&]uh1j hj")hMUhj0hhubj)}(h***Parameters** ``region`` loop variableh](h)}(h**Parameters**h]j)}(hj/)h]h Parameters}(hj1)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-)ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhMYhj))ubj)}(hhh]j)}(h``region`` loop variableh](j)}(h ``region``h]h)}(hjN)h]hregion}(hjP)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjL)ubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhM[hjH)ubj3)}(hhh]h)}(h loop variableh]h loop variable}(hjg)hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhMVhjd)ubah}(h]h ]h"]h$]h&]uh1j2hjH)ubeh}(h]h ]h"]h$]h&]uh1jhjc)hM[hjE)ubah}(h]h ]h"]h$]h&]uh1j hj))ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj0hhhNhNubjP)}(hhh]h}(h]h ]h"]h$]h&]entries](j\,__memblock_find_range_bottom_up (C function)!c.__memblock_find_range_bottom_uphNtauh1jOhj0hhhNhNubja)}(hhh](jf)}(hphys_addr_t __init_memblock __memblock_find_range_bottom_up (phys_addr_t start, phys_addr_t end, phys_addr_t size, phys_addr_t align, int nid, enum memblock_flags flags)h]jl)}(hphys_addr_t __init_memblock __memblock_find_range_bottom_up(phys_addr_t start, phys_addr_t end, phys_addr_t size, phys_addr_t align, int nid, enum memblock_flags flags)h](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetj)modnameN classnameNj j )}j! ]j$ )}j __memblock_find_range_bottom_upsb!c.__memblock_find_range_bottom_upasbuh1hhj)hhhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chKubj)}(h h]h }(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)hhhj)hKubh__init_memblock}(hj)hhhNhNubj)}(h h]h }(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)hhhj)hKubj)}(h__memblock_find_range_bottom_uph]j)}(hj)h]h__memblock_find_range_bottom_up}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj)hhhj)hKubj)}(hm(phys_addr_t start, phys_addr_t end, phys_addr_t size, phys_addr_t align, int nid, enum memblock_flags flags)h](j)}(hphys_addr_t starth](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj *ubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetj*modnameN classnameNj j )}j! ]j)!c.__memblock_find_range_bottom_upasbuh1hhj*ubj)}(h h]h }(hj-*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubj)}(hstarth]hstart}(hj;*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj*ubj)}(hphys_addr_t endh](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hjW*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjT*ubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetjY*modnameN classnameNj j )}j! ]j)!c.__memblock_find_range_bottom_upasbuh1hhjP*ubj)}(h h]h }(hju*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjP*ubj)}(hendh]hend}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjP*ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj*ubj)}(hphys_addr_t sizeh](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetj*modnameN classnameNj j )}j! ]j)!c.__memblock_find_range_bottom_upasbuh1hhj*ubj)}(h h]h }(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubj)}(hsizeh]hsize}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj*ubj)}(hphys_addr_t alignh](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetj*modnameN classnameNj j )}j! ]j)!c.__memblock_find_range_bottom_upasbuh1hhj*ubj)}(h h]h }(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubj)}(halignh]halign}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj*ubj)}(hint nidh](j)}(hinth]hint}(hj,+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(+ubj)}(h h]h }(hj:+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(+ubj)}(hnidh]hnid}(hjH+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(+ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj*ubj)}(henum memblock_flags flagsh](jr)}(hjuh]henum}(hja+hhhNhNubah}(h]h ]j~ah"]h$]h&]uh1jqhj]+ubj)}(h h]h }(hjn+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]+ubh)}(hhh]j)}(hmemblock_flagsh]hmemblock_flags}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|+ubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetj+modnameN classnameNj j )}j! ]j)!c.__memblock_find_range_bottom_upasbuh1hhj]+ubj)}(h h]h }(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]+ubj)}(hflagsh]hflags}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]+ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj*ubeh}(h]h ]h"]h$]h&]jjuh1jhj)hhhj)hKubeh}(h]h ]h"]h$]h&]jjjuh1jkjjhj)hhhj)hKubah}(h]j)ah ](jjeh"]h$]h&]jj)jhuh1jehj)hKhj)hhubj)}(hhh]h)}(h#find free area utility in bottom-uph]h#find free area utility in bottom-up}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chKhj+hhubah}(h]h ]h"]h$]h&]uh1jhj)hhhj)hKubeh}(h]h ](hfunctioneh"]h$]h&]jhjj+jj+jjjuh1j`hhhj0hNhNubj)}(hXK**Parameters** ``phys_addr_t start`` start of candidate range ``phys_addr_t end`` end of candidate range, can be ``MEMBLOCK_ALLOC_ANYWHERE`` or ``MEMBLOCK_ALLOC_ACCESSIBLE`` ``phys_addr_t size`` size of free area to find ``phys_addr_t align`` alignment of free area to find ``int nid`` nid of the free area to find, ``NUMA_NO_NODE`` for any node ``enum memblock_flags flags`` pick from blocks based on memory attributes **Description** Utility called from memblock_find_in_range_node(), find free area bottom-up. **Return** Found address on success, 0 on failure.h](h)}(h**Parameters**h]j)}(hj+h]h Parameters}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chKhj+ubj)}(hhh](j)}(h/``phys_addr_t start`` start of candidate range h](j)}(h``phys_addr_t start``h]h)}(hj,h]hphys_addr_t start}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj,ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chKhj,ubj3)}(hhh]h)}(hstart of candidate rangeh]hstart of candidate range}(hj/,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj+,hKhj,,ubah}(h]h ]h"]h$]h&]uh1j2hj,ubeh}(h]h ]h"]h$]h&]uh1jhj+,hKhj ,ubj)}(hp``phys_addr_t end`` end of candidate range, can be ``MEMBLOCK_ALLOC_ANYWHERE`` or ``MEMBLOCK_ALLOC_ACCESSIBLE`` h](j)}(h``phys_addr_t end``h]h)}(hjO,h]hphys_addr_t end}(hjQ,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjM,ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chKhjI,ubj3)}(hhh]h)}(h[end of candidate range, can be ``MEMBLOCK_ALLOC_ANYWHERE`` or ``MEMBLOCK_ALLOC_ACCESSIBLE``h](hend of candidate range, can be }(hjh,hhhNhNubh)}(h``MEMBLOCK_ALLOC_ANYWHERE``h]hMEMBLOCK_ALLOC_ANYWHERE}(hjp,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjh,ubh or }(hjh,hhhNhNubh)}(h``MEMBLOCK_ALLOC_ACCESSIBLE``h]hMEMBLOCK_ALLOC_ACCESSIBLE}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjh,ubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chKhje,ubah}(h]h ]h"]h$]h&]uh1j2hjI,ubeh}(h]h ]h"]h$]h&]uh1jhjd,hKhj ,ubj)}(h/``phys_addr_t size`` size of free area to find h](j)}(h``phys_addr_t size``h]h)}(hj,h]hphys_addr_t size}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj,ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chKhj,ubj3)}(hhh]h)}(hsize of free area to findh]hsize of free area to find}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj,hKhj,ubah}(h]h ]h"]h$]h&]uh1j2hj,ubeh}(h]h ]h"]h$]h&]uh1jhj,hKhj ,ubj)}(h5``phys_addr_t align`` alignment of free area to find h](j)}(h``phys_addr_t align``h]h)}(hj,h]hphys_addr_t align}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj,ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chKhj,ubj3)}(hhh]h)}(halignment of free area to findh]halignment of free area to find}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj,hKhj,ubah}(h]h ]h"]h$]h&]uh1j2hj,ubeh}(h]h ]h"]h$]h&]uh1jhj,hKhj ,ubj)}(hH``int nid`` nid of the free area to find, ``NUMA_NO_NODE`` for any node h](j)}(h ``int nid``h]h)}(hj-h]hint nid}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj-ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chKhj-ubj3)}(hhh]h)}(h;nid of the free area to find, ``NUMA_NO_NODE`` for any nodeh](hnid of the free area to find, }(hj4-hhhNhNubh)}(h``NUMA_NO_NODE``h]h NUMA_NO_NODE}(hj<-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj4-ubh for any node}(hj4-hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj0-hKhj1-ubah}(h]h ]h"]h$]h&]uh1j2hj-ubeh}(h]h ]h"]h$]h&]uh1jhj0-hKhj ,ubj)}(hJ``enum memblock_flags flags`` pick from blocks based on memory attributes h](j)}(h``enum memblock_flags flags``h]h)}(hjf-h]henum memblock_flags flags}(hjh-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjd-ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chKhj`-ubj3)}(hhh]h)}(h+pick from blocks based on memory attributesh]h+pick from blocks based on memory attributes}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj{-hKhj|-ubah}(h]h ]h"]h$]h&]uh1j2hj`-ubeh}(h]h ]h"]h$]h&]uh1jhj{-hKhj ,ubeh}(h]h ]h"]h$]h&]uh1j hj+ubh)}(h**Description**h]j)}(hj-h]h Description}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chKhj+ubh)}(hLUtility called from memblock_find_in_range_node(), find free area bottom-up.h]hLUtility called from memblock_find_in_range_node(), find free area bottom-up.}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chKhj+ubh)}(h **Return**h]j)}(hj-h]hReturn}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chKhj+ubh)}(h'Found address on success, 0 on failure.h]h'Found address on success, 0 on failure.}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chKhj+ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj0hhhNhNubjP)}(hhh]h}(h]h ]h"]h$]h&]entries](j\+__memblock_find_range_top_down (C function) c.__memblock_find_range_top_downhNtauh1jOhj0hhhNhNubja)}(hhh](jf)}(hphys_addr_t __init_memblock __memblock_find_range_top_down (phys_addr_t start, phys_addr_t end, phys_addr_t size, phys_addr_t align, int nid, enum memblock_flags flags)h]jl)}(hphys_addr_t __init_memblock __memblock_find_range_top_down(phys_addr_t start, phys_addr_t end, phys_addr_t size, phys_addr_t align, int nid, enum memblock_flags flags)h](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj .ubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetj.modnameN classnameNj j )}j! ]j$ )}j __memblock_find_range_top_downsb c.__memblock_find_range_top_downasbuh1hhj .hhhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chKubj)}(h h]h }(hj2.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj .hhhj1.hKubh__init_memblock}(hj .hhhNhNubj)}(h h]h }(hjD.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj .hhhj1.hKubj)}(h__memblock_find_range_top_downh]j)}(hj..h]h__memblock_find_range_top_down}(hjV.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjR.ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj .hhhj1.hKubj)}(hm(phys_addr_t start, phys_addr_t end, phys_addr_t size, phys_addr_t align, int nid, enum memblock_flags flags)h](j)}(hphys_addr_t starth](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hjt.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjq.ubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetjv.modnameN classnameNj j )}j! ]j,. c.__memblock_find_range_top_downasbuh1hhjm.ubj)}(h h]h }(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjm.ubj)}(hstarth]hstart}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjm.ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhji.ubj)}(hphys_addr_t endh](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetj.modnameN classnameNj j )}j! ]j,. c.__memblock_find_range_top_downasbuh1hhj.ubj)}(h h]h }(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubj)}(hendh]hend}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhji.ubj)}(hphys_addr_t sizeh](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetj/modnameN classnameNj j )}j! ]j,. c.__memblock_find_range_top_downasbuh1hhj.ubj)}(h h]h }(hj"/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubj)}(hsizeh]hsize}(hj0/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhji.ubj)}(hphys_addr_t alignh](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hjL/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjI/ubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetjN/modnameN classnameNj j )}j! ]j,. c.__memblock_find_range_top_downasbuh1hhjE/ubj)}(h h]h }(hjj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjE/ubj)}(halignh]halign}(hjx/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjE/ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhji.ubj)}(hint nidh](j)}(hinth]hint}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubj)}(h h]h }(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubj)}(hnidh]hnid}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhji.ubj)}(henum memblock_flags flagsh](jr)}(hjuh]henum}(hj/hhhNhNubah}(h]h ]j~ah"]h$]h&]uh1jqhj/ubj)}(h h]h }(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubh)}(hhh]j)}(hmemblock_flagsh]hmemblock_flags}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetj/modnameN classnameNj j )}j! ]j,. c.__memblock_find_range_top_downasbuh1hhj/ubj)}(h h]h }(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubj)}(hflagsh]hflags}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhji.ubeh}(h]h ]h"]h$]h&]jjuh1jhj .hhhj1.hKubeh}(h]h ]h"]h$]h&]jjjuh1jkjjhj.hhhj1.hKubah}(h]j.ah ](jjeh"]h$]h&]jj)jhuh1jehj1.hKhj.hhubj)}(hhh]h)}(h#find free area utility, in top-downh]h#find free area utility, in top-down}(hj:0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chKhj70hhubah}(h]h ]h"]h$]h&]uh1jhj.hhhj1.hKubeh}(h]h ](hfunctioneh"]h$]h&]jhjjR0jjR0jjjuh1j`hhhj0hNhNubj)}(hXJ**Parameters** ``phys_addr_t start`` start of candidate range ``phys_addr_t end`` end of candidate range, can be ``MEMBLOCK_ALLOC_ANYWHERE`` or ``MEMBLOCK_ALLOC_ACCESSIBLE`` ``phys_addr_t size`` size of free area to find ``phys_addr_t align`` alignment of free area to find ``int nid`` nid of the free area to find, ``NUMA_NO_NODE`` for any node ``enum memblock_flags flags`` pick from blocks based on memory attributes **Description** Utility called from memblock_find_in_range_node(), find free area top-down. **Return** Found address on success, 0 on failure.h](h)}(h**Parameters**h]j)}(hj\0h]h Parameters}(hj^0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZ0ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjV0ubj)}(hhh](j)}(h/``phys_addr_t start`` start of candidate range h](j)}(h``phys_addr_t start``h]h)}(hj{0h]hphys_addr_t start}(hj}0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjy0ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chKhju0ubj3)}(hhh]h)}(hstart of candidate rangeh]hstart of candidate range}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0hKhj0ubah}(h]h ]h"]h$]h&]uh1j2hju0ubeh}(h]h ]h"]h$]h&]uh1jhj0hKhjr0ubj)}(hp``phys_addr_t end`` end of candidate range, can be ``MEMBLOCK_ALLOC_ANYWHERE`` or ``MEMBLOCK_ALLOC_ACCESSIBLE`` h](j)}(h``phys_addr_t end``h]h)}(hj0h]hphys_addr_t end}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhj0ubj3)}(hhh]h)}(h[end of candidate range, can be ``MEMBLOCK_ALLOC_ANYWHERE`` or ``MEMBLOCK_ALLOC_ACCESSIBLE``h](hend of candidate range, can be }(hj0hhhNhNubh)}(h``MEMBLOCK_ALLOC_ANYWHERE``h]hMEMBLOCK_ALLOC_ANYWHERE}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0ubh or }(hj0hhhNhNubh)}(h``MEMBLOCK_ALLOC_ACCESSIBLE``h]hMEMBLOCK_ALLOC_ACCESSIBLE}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0ubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhj0ubah}(h]h ]h"]h$]h&]uh1j2hj0ubeh}(h]h ]h"]h$]h&]uh1jhj0hMhjr0ubj)}(h/``phys_addr_t size`` size of free area to find h](j)}(h``phys_addr_t size``h]h)}(hj1h]hphys_addr_t size}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj 1ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhj1ubj3)}(hhh]h)}(hsize of free area to findh]hsize of free area to find}(hj'1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj#1hMhj$1ubah}(h]h ]h"]h$]h&]uh1j2hj1ubeh}(h]h ]h"]h$]h&]uh1jhj#1hMhjr0ubj)}(h5``phys_addr_t align`` alignment of free area to find h](j)}(h``phys_addr_t align``h]h)}(hjG1h]hphys_addr_t align}(hjI1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjE1ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjA1ubj3)}(hhh]h)}(halignment of free area to findh]halignment of free area to find}(hj`1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj\1hMhj]1ubah}(h]h ]h"]h$]h&]uh1j2hjA1ubeh}(h]h ]h"]h$]h&]uh1jhj\1hMhjr0ubj)}(hH``int nid`` nid of the free area to find, ``NUMA_NO_NODE`` for any node h](j)}(h ``int nid``h]h)}(hj1h]hint nid}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj~1ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjz1ubj3)}(hhh]h)}(h;nid of the free area to find, ``NUMA_NO_NODE`` for any nodeh](hnid of the free area to find, }(hj1hhhNhNubh)}(h``NUMA_NO_NODE``h]h NUMA_NO_NODE}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj1ubh for any node}(hj1hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj1hMhj1ubah}(h]h ]h"]h$]h&]uh1j2hjz1ubeh}(h]h ]h"]h$]h&]uh1jhj1hMhjr0ubj)}(hJ``enum memblock_flags flags`` pick from blocks based on memory attributes h](j)}(h``enum memblock_flags flags``h]h)}(hj1h]henum memblock_flags flags}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj1ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhj1ubj3)}(hhh]h)}(h+pick from blocks based on memory attributesh]h+pick from blocks based on memory attributes}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj1hMhj1ubah}(h]h ]h"]h$]h&]uh1j2hj1ubeh}(h]h ]h"]h$]h&]uh1jhj1hMhjr0ubeh}(h]h ]h"]h$]h&]uh1j hjV0ubh)}(h**Description**h]j)}(hj2h]h Description}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjV0ubh)}(hKUtility called from memblock_find_in_range_node(), find free area top-down.h]hKUtility called from memblock_find_in_range_node(), find free area top-down.}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjV0ubh)}(h **Return**h]j)}(hj-2h]hReturn}(hj/2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+2ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjV0ubh)}(h'Found address on success, 0 on failure.h]h'Found address on success, 0 on failure.}(hjC2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chM hjV0ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj0hhhNhNubjP)}(hhh]h}(h]h ]h"]h$]h&]entries](j\(memblock_find_in_range_node (C function)c.memblock_find_in_range_nodehNtauh1jOhj0hhhNhNubja)}(hhh](jf)}(hphys_addr_t __init_memblock memblock_find_in_range_node (phys_addr_t size, phys_addr_t align, phys_addr_t start, phys_addr_t end, int nid, enum memblock_flags flags)h]jl)}(hphys_addr_t __init_memblock memblock_find_in_range_node(phys_addr_t size, phys_addr_t align, phys_addr_t start, phys_addr_t end, int nid, enum memblock_flags flags)h](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hju2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjr2ubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetjw2modnameN classnameNj j )}j! ]j$ )}j memblock_find_in_range_nodesbc.memblock_find_in_range_nodeasbuh1hhjn2hhhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chM%ubj)}(h h]h }(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjn2hhhj2hM%ubh__init_memblock}(hjn2hhhNhNubj)}(h h]h }(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjn2hhhj2hM%ubj)}(hmemblock_find_in_range_nodeh]j)}(hj2h]hmemblock_find_in_range_node}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjn2hhhj2hM%ubj)}(hm(phys_addr_t size, phys_addr_t align, phys_addr_t start, phys_addr_t end, int nid, enum memblock_flags flags)h](j)}(hphys_addr_t sizeh](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetj2modnameN classnameNj j )}j! ]j2c.memblock_find_in_range_nodeasbuh1hhj2ubj)}(h h]h }(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubj)}(hsizeh]hsize}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj2ubj)}(hphys_addr_t alignh](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hj!3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetj#3modnameN classnameNj j )}j! ]j2c.memblock_find_in_range_nodeasbuh1hhj3ubj)}(h h]h }(hj?3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubj)}(halignh]halign}(hjM3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj2ubj)}(hphys_addr_t starth](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hji3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjf3ubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetjk3modnameN classnameNj j )}j! ]j2c.memblock_find_in_range_nodeasbuh1hhjb3ubj)}(h h]h }(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjb3ubj)}(hstarth]hstart}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjb3ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj2ubj)}(hphys_addr_t endh](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetj3modnameN classnameNj j )}j! ]j2c.memblock_find_in_range_nodeasbuh1hhj3ubj)}(h h]h }(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubj)}(hendh]hend}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj2ubj)}(hint nidh](j)}(hinth]hint}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubj)}(h h]h }(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubj)}(hnidh]hnid}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj2ubj)}(henum memblock_flags flagsh](jr)}(hjuh]henum}(hj+4hhhNhNubah}(h]h ]j~ah"]h$]h&]uh1jqhj'4ubj)}(h h]h }(hj84hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'4ubh)}(hhh]j)}(hmemblock_flagsh]hmemblock_flags}(hjI4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjF4ubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetjK4modnameN classnameNj j )}j! ]j2c.memblock_find_in_range_nodeasbuh1hhj'4ubj)}(h h]h }(hjg4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'4ubj)}(hflagsh]hflags}(hju4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'4ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj2ubeh}(h]h ]h"]h$]h&]jjuh1jhjn2hhhj2hM%ubeh}(h]h ]h"]h$]h&]jjjuh1jkjjhjj2hhhj2hM%ubah}(h]je2ah ](jjeh"]h$]h&]jj)jhuh1jehj2hM%hjg2hhubj)}(hhh]h)}(h&find free area in given range and nodeh]h&find free area in given range and node}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chM%hj4hhubah}(h]h ]h"]h$]h&]uh1jhjg2hhhj2hM%ubeh}(h]h ](hfunctioneh"]h$]h&]jhjj4jj4jjjuh1j`hhhj0hNhNubj)}(hXL**Parameters** ``phys_addr_t size`` size of free area to find ``phys_addr_t align`` alignment of free area to find ``phys_addr_t start`` start of candidate range ``phys_addr_t end`` end of candidate range, can be ``MEMBLOCK_ALLOC_ANYWHERE`` or ``MEMBLOCK_ALLOC_ACCESSIBLE`` ``int nid`` nid of the free area to find, ``NUMA_NO_NODE`` for any node ``enum memblock_flags flags`` pick from blocks based on memory attributes **Description** Find **size** free area aligned to **align** in the specified range and node. **Return** Found address on success, 0 on failure.h](h)}(h**Parameters**h]j)}(hj4h]h Parameters}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chM)hj4ubj)}(hhh](j)}(h/``phys_addr_t size`` size of free area to find h](j)}(h``phys_addr_t size``h]h)}(hj4h]hphys_addr_t size}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj4ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chM&hj4ubj3)}(hhh]h)}(hsize of free area to findh]hsize of free area to find}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj4hM&hj4ubah}(h]h ]h"]h$]h&]uh1j2hj4ubeh}(h]h ]h"]h$]h&]uh1jhj4hM&hj4ubj)}(h5``phys_addr_t align`` alignment of free area to find h](j)}(h``phys_addr_t align``h]h)}(hj5h]hphys_addr_t align}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj5ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chM'hj5ubj3)}(hhh]h)}(halignment of free area to findh]halignment of free area to find}(hj25hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj.5hM'hj/5ubah}(h]h ]h"]h$]h&]uh1j2hj5ubeh}(h]h ]h"]h$]h&]uh1jhj.5hM'hj4ubj)}(h/``phys_addr_t start`` start of candidate range h](j)}(h``phys_addr_t start``h]h)}(hjR5h]hphys_addr_t start}(hjT5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjP5ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chM(hjL5ubj3)}(hhh]h)}(hstart of candidate rangeh]hstart of candidate range}(hjk5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjg5hM(hjh5ubah}(h]h ]h"]h$]h&]uh1j2hjL5ubeh}(h]h ]h"]h$]h&]uh1jhjg5hM(hj4ubj)}(hp``phys_addr_t end`` end of candidate range, can be ``MEMBLOCK_ALLOC_ANYWHERE`` or ``MEMBLOCK_ALLOC_ACCESSIBLE`` h](j)}(h``phys_addr_t end``h]h)}(hj5h]hphys_addr_t end}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj5ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chM*hj5ubj3)}(hhh]h)}(h[end of candidate range, can be ``MEMBLOCK_ALLOC_ANYWHERE`` or ``MEMBLOCK_ALLOC_ACCESSIBLE``h](hend of candidate range, can be }(hj5hhhNhNubh)}(h``MEMBLOCK_ALLOC_ANYWHERE``h]hMEMBLOCK_ALLOC_ANYWHERE}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj5ubh or }(hj5hhhNhNubh)}(h``MEMBLOCK_ALLOC_ACCESSIBLE``h]hMEMBLOCK_ALLOC_ACCESSIBLE}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj5ubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chM)hj5ubah}(h]h ]h"]h$]h&]uh1j2hj5ubeh}(h]h ]h"]h$]h&]uh1jhj5hM*hj4ubj)}(hH``int nid`` nid of the free area to find, ``NUMA_NO_NODE`` for any node h](j)}(h ``int nid``h]h)}(hj5h]hint nid}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj5ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chM+hj5ubj3)}(hhh]h)}(h;nid of the free area to find, ``NUMA_NO_NODE`` for any nodeh](hnid of the free area to find, }(hj5hhhNhNubh)}(h``NUMA_NO_NODE``h]h NUMA_NO_NODE}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj5ubh for any node}(hj5hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj5hM+hj5ubah}(h]h ]h"]h$]h&]uh1j2hj5ubeh}(h]h ]h"]h$]h&]uh1jhj5hM+hj4ubj)}(hJ``enum memblock_flags flags`` pick from blocks based on memory attributes h](j)}(h``enum memblock_flags flags``h]h)}(hj06h]henum memblock_flags flags}(hj26hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj.6ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chM,hj*6ubj3)}(hhh]h)}(h+pick from blocks based on memory attributesh]h+pick from blocks based on memory attributes}(hjI6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjE6hM,hjF6ubah}(h]h ]h"]h$]h&]uh1j2hj*6ubeh}(h]h ]h"]h$]h&]uh1jhjE6hM,hj4ubeh}(h]h ]h"]h$]h&]uh1j hj4ubh)}(h**Description**h]j)}(hjk6h]h Description}(hjm6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhji6ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chM.hj4ubh)}(hMFind **size** free area aligned to **align** in the specified range and node.h](hFind }(hj6hhhNhNubj)}(h**size**h]hsize}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubh free area aligned to }(hj6hhhNhNubj)}(h **align**h]halign}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubh! in the specified range and node.}(hj6hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chM-hj4ubh)}(h **Return**h]j)}(hj6h]hReturn}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chM/hj4ubh)}(h'Found address on success, 0 on failure.h]h'Found address on success, 0 on failure.}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chM0hj4ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj0hhhNhNubjP)}(hhh]h}(h]h ]h"]h$]h&]entries](j\#memblock_find_in_range (C function)c.memblock_find_in_rangehNtauh1jOhj0hhhNhNubja)}(hhh](jf)}(h|phys_addr_t __init_memblock memblock_find_in_range (phys_addr_t start, phys_addr_t end, phys_addr_t size, phys_addr_t align)h]jl)}(h{phys_addr_t __init_memblock memblock_find_in_range(phys_addr_t start, phys_addr_t end, phys_addr_t size, phys_addr_t align)h](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetj7modnameN classnameNj j )}j! ]j$ )}j memblock_find_in_rangesbc.memblock_find_in_rangeasbuh1hhj6hhhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMJubj)}(h h]h }(hj 7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6hhhj7hMJubh__init_memblock}(hj6hhhNhNubj)}(h h]h }(hj27hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6hhhj7hMJubj)}(hmemblock_find_in_rangeh]j)}(hj7h]hmemblock_find_in_range}(hjD7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@7ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj6hhhj7hMJubj)}(hI(phys_addr_t start, phys_addr_t end, phys_addr_t size, phys_addr_t align)h](j)}(hphys_addr_t starth](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hjb7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_7ubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetjd7modnameN classnameNj j )}j! ]j7c.memblock_find_in_rangeasbuh1hhj[7ubj)}(h h]h }(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[7ubj)}(hstarth]hstart}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[7ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjW7ubj)}(hphys_addr_t endh](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetj7modnameN classnameNj j )}j! ]j7c.memblock_find_in_rangeasbuh1hhj7ubj)}(h h]h }(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubj)}(hendh]hend}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjW7ubj)}(hphys_addr_t sizeh](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetj7modnameN classnameNj j )}j! ]j7c.memblock_find_in_rangeasbuh1hhj7ubj)}(h h]h }(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubj)}(hsizeh]hsize}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjW7ubj)}(hphys_addr_t alignh](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hj:8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj78ubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetj<8modnameN classnameNj j )}j! ]j7c.memblock_find_in_rangeasbuh1hhj38ubj)}(h h]h }(hjX8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj38ubj)}(halignh]halign}(hjf8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj38ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjW7ubeh}(h]h ]h"]h$]h&]jjuh1jhj6hhhj7hMJubeh}(h]h ]h"]h$]h&]jjjuh1jkjjhj6hhhj7hMJubah}(h]j6ah ](jjeh"]h$]h&]jj)jhuh1jehj7hMJhj6hhubj)}(hhh]h)}(hfind free area in given rangeh]hfind free area in given range}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMJhj8hhubah}(h]h ]h"]h$]h&]uh1jhj6hhhj7hMJubeh}(h]h ](hfunctioneh"]h$]h&]jhjj8jj8jjjuh1j`hhhj0hNhNubj)}(hX**Parameters** ``phys_addr_t start`` start of candidate range ``phys_addr_t end`` end of candidate range, can be ``MEMBLOCK_ALLOC_ANYWHERE`` or ``MEMBLOCK_ALLOC_ACCESSIBLE`` ``phys_addr_t size`` size of free area to find ``phys_addr_t align`` alignment of free area to find **Description** Find **size** free area aligned to **align** in the specified range. **Return** Found address on success, 0 on failure.h](h)}(h**Parameters**h]j)}(hj8h]h Parameters}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMNhj8ubj)}(hhh](j)}(h/``phys_addr_t start`` start of candidate range h](j)}(h``phys_addr_t start``h]h)}(hj8h]hphys_addr_t start}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj8ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMKhj8ubj3)}(hhh]h)}(hstart of candidate rangeh]hstart of candidate range}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj8hMKhj8ubah}(h]h ]h"]h$]h&]uh1j2hj8ubeh}(h]h ]h"]h$]h&]uh1jhj8hMKhj8ubj)}(hp``phys_addr_t end`` end of candidate range, can be ``MEMBLOCK_ALLOC_ANYWHERE`` or ``MEMBLOCK_ALLOC_ACCESSIBLE`` h](j)}(h``phys_addr_t end``h]h)}(hj 9h]hphys_addr_t end}(hj 9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj9ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMMhj9ubj3)}(hhh]h)}(h[end of candidate range, can be ``MEMBLOCK_ALLOC_ANYWHERE`` or ``MEMBLOCK_ALLOC_ACCESSIBLE``h](hend of candidate range, can be }(hj#9hhhNhNubh)}(h``MEMBLOCK_ALLOC_ANYWHERE``h]hMEMBLOCK_ALLOC_ANYWHERE}(hj+9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj#9ubh or }(hj#9hhhNhNubh)}(h``MEMBLOCK_ALLOC_ACCESSIBLE``h]hMEMBLOCK_ALLOC_ACCESSIBLE}(hj=9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj#9ubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMLhj 9ubah}(h]h ]h"]h$]h&]uh1j2hj9ubeh}(h]h ]h"]h$]h&]uh1jhj9hMMhj8ubj)}(h/``phys_addr_t size`` size of free area to find h](j)}(h``phys_addr_t size``h]h)}(hjd9h]hphys_addr_t size}(hjf9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjb9ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMNhj^9ubj3)}(hhh]h)}(hsize of free area to findh]hsize of free area to find}(hj}9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjy9hMNhjz9ubah}(h]h ]h"]h$]h&]uh1j2hj^9ubeh}(h]h ]h"]h$]h&]uh1jhjy9hMNhj8ubj)}(h5``phys_addr_t align`` alignment of free area to find h](j)}(h``phys_addr_t align``h]h)}(hj9h]hphys_addr_t align}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj9ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMOhj9ubj3)}(hhh]h)}(halignment of free area to findh]halignment of free area to find}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj9hMOhj9ubah}(h]h ]h"]h$]h&]uh1j2hj9ubeh}(h]h ]h"]h$]h&]uh1jhj9hMOhj8ubeh}(h]h ]h"]h$]h&]uh1j hj8ubh)}(h**Description**h]j)}(hj9h]h Description}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMQhj8ubh)}(hDFind **size** free area aligned to **align** in the specified range.h](hFind }(hj9hhhNhNubj)}(h**size**h]hsize}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubh free area aligned to }(hj9hhhNhNubj)}(h **align**h]halign}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubh in the specified range.}(hj9hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMPhj8ubh)}(h **Return**h]j)}(hj#:h]hReturn}(hj%:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!:ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMRhj8ubh)}(h'Found address on success, 0 on failure.h]h'Found address on success, 0 on failure.}(hj9:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMShj8ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj0hhhNhNubjP)}(hhh]h}(h]h ]h"]h$]h&]entries](j\memblock_discard (C function)c.memblock_discardhNtauh1jOhj0hhhNhNubja)}(hhh](jf)}(hvoid memblock_discard (void)h]jl)}(hvoid memblock_discard(void)h](j)}(hvoidh]hvoid}(hjh:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjd:hhhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chM~ubj)}(h h]h }(hjw:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjd:hhhjv:hM~ubj)}(hmemblock_discardh]j)}(hmemblock_discardh]hmemblock_discard}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjd:hhhjv:hM~ubj)}(h(void)h]j)}(hvoidh]j)}(hvoidh]hvoid}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&]noemphjjuh1jhj:ubah}(h]h ]h"]h$]h&]jjuh1jhjd:hhhjv:hM~ubeh}(h]h ]h"]h$]h&]jjjuh1jkjjhj`:hhhjv:hM~ubah}(h]j[:ah ](jjeh"]h$]h&]jj)jhuh1jehjv:hM~hj]:hhubj)}(hhh]h)}(h9discard memory and reserved arrays if they were allocatedh]h9discard memory and reserved arrays if they were allocated}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chM~hj:hhubah}(h]h ]h"]h$]h&]uh1jhj]:hhhjv:hM~ubeh}(h]h ](hfunctioneh"]h$]h&]jhjj:jj:jjjuh1j`hhhj0hNhNubj)}(h'**Parameters** ``void`` no argumentsh](h)}(h**Parameters**h]j)}(hj:h]h Parameters}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhj:ubj)}(hhh]j)}(h``void`` no argumentsh](j)}(h``void``h]h)}(hj;h]hvoid}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj;ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhj ;ubj3)}(hhh]h)}(h no argumentsh]h no arguments}(hj);hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chKhj&;ubah}(h]h ]h"]h$]h&]uh1j2hj ;ubeh}(h]h ]h"]h$]h&]uh1jhj%;hMhj;ubah}(h]h ]h"]h$]h&]uh1j hj:ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj0hhhNhNubjP)}(hhh]h}(h]h ]h"]h$]h&]entries](j\"memblock_double_array (C function)c.memblock_double_arrayhNtauh1jOhj0hhhNhNubja)}(hhh](jf)}(h}int __init_memblock memblock_double_array (struct memblock_type *type, phys_addr_t new_area_start, phys_addr_t new_area_size)h]jl)}(h|int __init_memblock memblock_double_array(struct memblock_type *type, phys_addr_t new_area_start, phys_addr_t new_area_size)h](j)}(hinth]hint}(hjj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjf;hhhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMubj)}(h h]h }(hjy;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjf;hhhjx;hMubh__init_memblock}(hjf;hhhNhNubj)}(h h]h }(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjf;hhhjx;hMubj)}(hmemblock_double_arrayh]j)}(hmemblock_double_arrayh]hmemblock_double_array}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjf;hhhjx;hMubj)}(hS(struct memblock_type *type, phys_addr_t new_area_start, phys_addr_t new_area_size)h](j)}(hstruct memblock_type *typeh](jr)}(hjh]hstruct}(hj;hhhNhNubah}(h]h ]j~ah"]h$]h&]uh1jqhj;ubj)}(h h]h }(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubh)}(hhh]j)}(h memblock_typeh]h memblock_type}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetj;modnameN classnameNj j )}j! ]j$ )}j j;sbc.memblock_double_arrayasbuh1hhj;ubj)}(h h]h }(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubj!)}(hj$h]h*}(hj<hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1j!hj;ubj)}(htypeh]htype}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj;ubj)}(hphys_addr_t new_area_starth](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hj.<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+<ubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetj0<modnameN classnameNj j )}j! ]j;c.memblock_double_arrayasbuh1hhj'<ubj)}(h h]h }(hjL<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'<ubj)}(hnew_area_starth]hnew_area_start}(hjZ<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'<ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj;ubj)}(hphys_addr_t new_area_sizeh](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hjv<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjs<ubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetjx<modnameN classnameNj j )}j! ]j;c.memblock_double_arrayasbuh1hhjo<ubj)}(h h]h }(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjo<ubj)}(h new_area_sizeh]h new_area_size}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjo<ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj;ubeh}(h]h ]h"]h$]h&]jjuh1jhjf;hhhjx;hMubeh}(h]h ]h"]h$]h&]jjjuh1jkjjhjb;hhhjx;hMubah}(h]j];ah ](jjeh"]h$]h&]jj)jhuh1jehjx;hMhj_;hhubj)}(hhh]h)}(h-double the size of the memblock regions arrayh]h-double the size of the memblock regions array}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhj<hhubah}(h]h ]h"]h$]h&]uh1jhj_;hhhjx;hMubeh}(h]h ](hfunctioneh"]h$]h&]jhjj<jj<jjjuh1j`hhhj0hNhNubj)}(hX**Parameters** ``struct memblock_type *type`` memblock type of the regions array being doubled ``phys_addr_t new_area_start`` starting address of memory range to avoid overlap with ``phys_addr_t new_area_size`` size of memory range to avoid overlap with **Description** Double the size of the **type** regions array. If memblock is being used to allocate memory for a new reserved regions array and there is a previously allocated memory range [**new_area_start**, **new_area_start** + **new_area_size**] waiting to be reserved, ensure the memory used by the new array does not overlap. **Return** 0 on success, -1 on failure.h](h)}(h**Parameters**h]j)}(hj<h]h Parameters}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhj<ubj)}(hhh](j)}(hP``struct memblock_type *type`` memblock type of the regions array being doubled h](j)}(h``struct memblock_type *type``h]h)}(hj =h]hstruct memblock_type *type}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj =ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhj=ubj3)}(hhh]h)}(h0memblock type of the regions array being doubledh]h0memblock type of the regions array being doubled}(hj&=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj"=hMhj#=ubah}(h]h ]h"]h$]h&]uh1j2hj=ubeh}(h]h ]h"]h$]h&]uh1jhj"=hMhj=ubj)}(hV``phys_addr_t new_area_start`` starting address of memory range to avoid overlap with h](j)}(h``phys_addr_t new_area_start``h]h)}(hjF=h]hphys_addr_t new_area_start}(hjH=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjD=ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhj@=ubj3)}(hhh]h)}(h6starting address of memory range to avoid overlap withh]h6starting address of memory range to avoid overlap with}(hj_=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj[=hMhj\=ubah}(h]h ]h"]h$]h&]uh1j2hj@=ubeh}(h]h ]h"]h$]h&]uh1jhj[=hMhj=ubj)}(hI``phys_addr_t new_area_size`` size of memory range to avoid overlap with h](j)}(h``phys_addr_t new_area_size``h]h)}(hj=h]hphys_addr_t new_area_size}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj}=ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjy=ubj3)}(hhh]h)}(h*size of memory range to avoid overlap withh]h*size of memory range to avoid overlap with}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj=hMhj=ubah}(h]h ]h"]h$]h&]uh1j2hjy=ubeh}(h]h ]h"]h$]h&]uh1jhj=hMhj=ubeh}(h]h ]h"]h$]h&]uh1j hj<ubh)}(h**Description**h]j)}(hj=h]h Description}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhj<ubh)}(hX<Double the size of the **type** regions array. If memblock is being used to allocate memory for a new reserved regions array and there is a previously allocated memory range [**new_area_start**, **new_area_start** + **new_area_size**] waiting to be reserved, ensure the memory used by the new array does not overlap.h](hDouble the size of the }(hj=hhhNhNubj)}(h**type**h]htype}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubh regions array. If memblock is being used to allocate memory for a new reserved regions array and there is a previously allocated memory range [}(hj=hhhNhNubj)}(h**new_area_start**h]hnew_area_start}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubh, }(hj=hhhNhNubj)}(h**new_area_start**h]hnew_area_start}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubh + }(hj=hhhNhNubj)}(h**new_area_size**h]h new_area_size}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubhS] waiting to be reserved, ensure the memory used by the new array does not overlap.}(hj=hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhj<ubh)}(h **Return**h]j)}(hj)>h]hReturn}(hj+>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'>ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhj<ubh)}(h0 on success, -1 on failure.h]h0 on success, -1 on failure.}(hj?>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhj<ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj0hhhNhNubjP)}(hhh]h}(h]h ]h"]h$]h&]entries](j\#memblock_merge_regions (C function)c.memblock_merge_regionshNtauh1jOhj0hhhNhNubja)}(hhh](jf)}(hxvoid __init_memblock memblock_merge_regions (struct memblock_type *type, unsigned long start_rgn, unsigned long end_rgn)h]jl)}(hwvoid __init_memblock memblock_merge_regions(struct memblock_type *type, unsigned long start_rgn, unsigned long end_rgn)h](j)}(hvoidh]hvoid}(hjn>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjj>hhhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMubj)}(h h]h }(hj}>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjj>hhhj|>hMubh__init_memblock}(hjj>hhhNhNubj)}(h h]h }(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjj>hhhj|>hMubj)}(hmemblock_merge_regionsh]j)}(hmemblock_merge_regionsh]hmemblock_merge_regions}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjj>hhhj|>hMubj)}(hL(struct memblock_type *type, unsigned long start_rgn, unsigned long end_rgn)h](j)}(hstruct memblock_type *typeh](jr)}(hjh]hstruct}(hj>hhhNhNubah}(h]h ]j~ah"]h$]h&]uh1jqhj>ubj)}(h h]h }(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubh)}(hhh]j)}(h memblock_typeh]h memblock_type}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetj>modnameN classnameNj j )}j! ]j$ )}j j>sbc.memblock_merge_regionsasbuh1hhj>ubj)}(h h]h }(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubj!)}(hj$h]h*}(hj ?hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1j!hj>ubj)}(htypeh]htype}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj>ubj)}(hunsigned long start_rgnh](j)}(hunsignedh]hunsigned}(hj/?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+?ubj)}(h h]h }(hj=?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+?ubj)}(hlongh]hlong}(hjK?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+?ubj)}(h h]h }(hjY?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+?ubj)}(h start_rgnh]h start_rgn}(hjg?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+?ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj>ubj)}(hunsigned long end_rgnh](j)}(hunsignedh]hunsigned}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|?ubj)}(h h]h }(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|?ubj)}(hlongh]hlong}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|?ubj)}(h h]h }(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|?ubj)}(hend_rgnh]hend_rgn}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|?ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj>ubeh}(h]h ]h"]h$]h&]jjuh1jhjj>hhhj|>hMubeh}(h]h ]h"]h$]h&]jjjuh1jkjjhjf>hhhj|>hMubah}(h]ja>ah ](jjeh"]h$]h&]jj)jhuh1jehj|>hMhjc>hhubj)}(hhh]h)}(h$merge neighboring compatible regionsh]h$merge neighboring compatible regions}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhj?hhubah}(h]h ]h"]h$]h&]uh1jhjc>hhhj|>hMubeh}(h]h ](hfunctioneh"]h$]h&]jhjj?jj?jjjuh1j`hhhj0hNhNubj)}(hX)**Parameters** ``struct memblock_type *type`` memblock type to scan ``unsigned long start_rgn`` start scanning from (**start_rgn** - 1) ``unsigned long end_rgn`` end scanning at (**end_rgn** - 1) Scan **type** and merge neighboring compatible regions in [**start_rgn** - 1, **end_rgn**)h](h)}(h**Parameters**h]j)}(hj@h]h Parameters}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhj?ubj)}(hhh](j)}(h5``struct memblock_type *type`` memblock type to scan h](j)}(h``struct memblock_type *type``h]h)}(hj#@h]hstruct memblock_type *type}(hj%@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj!@ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhj@ubj3)}(hhh]h)}(hmemblock type to scanh]hmemblock type to scan}(hj<@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj8@hMhj9@ubah}(h]h ]h"]h$]h&]uh1j2hj@ubeh}(h]h ]h"]h$]h&]uh1jhj8@hMhj@ubj)}(hD``unsigned long start_rgn`` start scanning from (**start_rgn** - 1) h](j)}(h``unsigned long start_rgn``h]h)}(hj\@h]hunsigned long start_rgn}(hj^@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjZ@ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjV@ubj3)}(hhh]h)}(h'start scanning from (**start_rgn** - 1)h](hstart scanning from (}(hju@hhhNhNubj)}(h **start_rgn**h]h start_rgn}(hj}@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhju@ubh - 1)}(hju@hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjq@hMhjr@ubah}(h]h ]h"]h$]h&]uh1j2hjV@ubeh}(h]h ]h"]h$]h&]uh1jhjq@hMhj@ubj)}(h``unsigned long end_rgn`` end scanning at (**end_rgn** - 1) Scan **type** and merge neighboring compatible regions in [**start_rgn** - 1, **end_rgn**)h](j)}(h``unsigned long end_rgn``h]h)}(hj@h]hunsigned long end_rgn}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj@ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhj@ubj3)}(hhh]h)}(h|end scanning at (**end_rgn** - 1) Scan **type** and merge neighboring compatible regions in [**start_rgn** - 1, **end_rgn**)h](hend scanning at (}(hj@hhhNhNubj)}(h **end_rgn**h]hend_rgn}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubh - 1) Scan }(hj@hhhNhNubj)}(h**type**h]htype}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubh. and merge neighboring compatible regions in [}(hj@hhhNhNubj)}(h **start_rgn**h]h start_rgn}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubh - 1, }(hj@hhhNhNubj)}(h **end_rgn**h]hend_rgn}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubh)}(hj@hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj@hMhj@ubah}(h]h ]h"]h$]h&]uh1j2hj@ubeh}(h]h ]h"]h$]h&]uh1jhj@hMhj@ubeh}(h]h ]h"]h$]h&]uh1j hj?ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj0hhhNhNubjP)}(hhh]h}(h]h ]h"]h$]h&]entries](j\#memblock_insert_region (C function)c.memblock_insert_regionhNtauh1jOhj0hhhNhNubja)}(hhh](jf)}(hvoid __init_memblock memblock_insert_region (struct memblock_type *type, int idx, phys_addr_t base, phys_addr_t size, int nid, enum memblock_flags flags)h]jl)}(hvoid __init_memblock memblock_insert_region(struct memblock_type *type, int idx, phys_addr_t base, phys_addr_t size, int nid, enum memblock_flags flags)h](j)}(hvoidh]hvoid}(hjHAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDAhhhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chM3ubj)}(h h]h }(hjWAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDAhhhjVAhM3ubh__init_memblock}(hjDAhhhNhNubj)}(h h]h }(hjiAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDAhhhjVAhM3ubj)}(hmemblock_insert_regionh]j)}(hmemblock_insert_regionh]hmemblock_insert_region}(hj{AhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwAubah}(h]h ](jjeh"]h$]h&]jjuh1jhjDAhhhjVAhM3ubj)}(hm(struct memblock_type *type, int idx, phys_addr_t base, phys_addr_t size, int nid, enum memblock_flags flags)h](j)}(hstruct memblock_type *typeh](jr)}(hjh]hstruct}(hjAhhhNhNubah}(h]h ]j~ah"]h$]h&]uh1jqhjAubj)}(h h]h }(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubh)}(hhh]j)}(h memblock_typeh]h memblock_type}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetjAmodnameN classnameNj j )}j! ]j$ )}j j}Asbc.memblock_insert_regionasbuh1hhjAubj)}(h h]h }(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubj!)}(hj$h]h*}(hjAhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1j!hjAubj)}(htypeh]htype}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjAubj)}(hint idxh](j)}(hinth]hint}(hj BhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubj)}(h h]h }(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubj)}(hidxh]hidx}(hj%BhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjAubj)}(hphys_addr_t baseh](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hjABhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>Bubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetjCBmodnameN classnameNj j )}j! ]jAc.memblock_insert_regionasbuh1hhj:Bubj)}(h h]h }(hj_BhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:Bubj)}(hbaseh]hbase}(hjmBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:Bubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjAubj)}(hphys_addr_t sizeh](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetjBmodnameN classnameNj j )}j! ]jAc.memblock_insert_regionasbuh1hhjBubj)}(h h]h }(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubj)}(hsizeh]hsize}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjAubj)}(hint nidh](j)}(hinth]hint}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubj)}(h h]h }(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubj)}(hnidh]hnid}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjAubj)}(henum memblock_flags flagsh](jr)}(hjuh]henum}(hjChhhNhNubah}(h]h ]j~ah"]h$]h&]uh1jqhjBubj)}(h h]h }(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubh)}(hhh]j)}(hmemblock_flagsh]hmemblock_flags}(hj!ChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetj#CmodnameN classnameNj j )}j! ]jAc.memblock_insert_regionasbuh1hhjBubj)}(h h]h }(hj?ChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubj)}(hflagsh]hflags}(hjMChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjAubeh}(h]h ]h"]h$]h&]jjuh1jhjDAhhhjVAhM3ubeh}(h]h ]h"]h$]h&]jjjuh1jkjjhj@AhhhjVAhM3ubah}(h]j;Aah ](jjeh"]h$]h&]jj)jhuh1jehjVAhM3hj=Ahhubj)}(hhh]h)}(hinsert new memblock regionh]hinsert new memblock region}(hjwChhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chM3hjtChhubah}(h]h ]h"]h$]h&]uh1jhj=AhhhjVAhM3ubeh}(h]h ](hfunctioneh"]h$]h&]jhjjCjjCjjjuh1j`hhhj0hNhNubj)}(hX**Parameters** ``struct memblock_type *type`` memblock type to insert into ``int idx`` index for the insertion point ``phys_addr_t base`` base address of the new region ``phys_addr_t size`` size of the new region ``int nid`` node id of the new region ``enum memblock_flags flags`` flags of the new region **Description** Insert new memblock region [**base**, **base** + **size**) into **type** at **idx**. **type** must already have extra room to accommodate the new region.h](h)}(h**Parameters**h]j)}(hjCh]h Parameters}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chM7hjCubj)}(hhh](j)}(h<``struct memblock_type *type`` memblock type to insert into h](j)}(h``struct memblock_type *type``h]h)}(hjCh]hstruct memblock_type *type}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhjCubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chM4hjCubj3)}(hhh]h)}(hmemblock type to insert intoh]hmemblock type to insert into}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhjChM4hjCubah}(h]h ]h"]h$]h&]uh1j2hjCubeh}(h]h ]h"]h$]h&]uh1jhjChM4hjCubj)}(h*``int idx`` index for the insertion point h](j)}(h ``int idx``h]h)}(hjCh]hint idx}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhjCubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chM5hjCubj3)}(hhh]h)}(hindex for the insertion pointh]hindex for the insertion point}(hj DhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjDhM5hjDubah}(h]h ]h"]h$]h&]uh1j2hjCubeh}(h]h ]h"]h$]h&]uh1jhjDhM5hjCubj)}(h4``phys_addr_t base`` base address of the new region h](j)}(h``phys_addr_t base``h]h)}(hj*Dh]hphys_addr_t base}(hj,DhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj(Dubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chM6hj$Dubj3)}(hhh]h)}(hbase address of the new regionh]hbase address of the new region}(hjCDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj?DhM6hj@Dubah}(h]h ]h"]h$]h&]uh1j2hj$Dubeh}(h]h ]h"]h$]h&]uh1jhj?DhM6hjCubj)}(h,``phys_addr_t size`` size of the new region h](j)}(h``phys_addr_t size``h]h)}(hjcDh]hphys_addr_t size}(hjeDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjaDubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chM7hj]Dubj3)}(hhh]h)}(hsize of the new regionh]hsize of the new region}(hj|DhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjxDhM7hjyDubah}(h]h ]h"]h$]h&]uh1j2hj]Dubeh}(h]h ]h"]h$]h&]uh1jhjxDhM7hjCubj)}(h&``int nid`` node id of the new region h](j)}(h ``int nid``h]h)}(hjDh]hint nid}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjDubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chM8hjDubj3)}(hhh]h)}(hnode id of the new regionh]hnode id of the new region}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjDhM8hjDubah}(h]h ]h"]h$]h&]uh1j2hjDubeh}(h]h ]h"]h$]h&]uh1jhjDhM8hjCubj)}(h6``enum memblock_flags flags`` flags of the new region h](j)}(h``enum memblock_flags flags``h]h)}(hjDh]henum memblock_flags flags}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjDubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chM9hjDubj3)}(hhh]h)}(hflags of the new regionh]hflags of the new region}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjDhM9hjDubah}(h]h ]h"]h$]h&]uh1j2hjDubeh}(h]h ]h"]h$]h&]uh1jhjDhM9hjCubeh}(h]h ]h"]h$]h&]uh1j hjCubh)}(h**Description**h]j)}(hjEh]h Description}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chM;hjCubh)}(hInsert new memblock region [**base**, **base** + **size**) into **type** at **idx**. **type** must already have extra room to accommodate the new region.h](hInsert new memblock region [}(hj&EhhhNhNubj)}(h**base**h]hbase}(hj.EhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&Eubh, }(hj&EhhhNhNubj)}(h**base**h]hbase}(hj@EhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&Eubh + }(hj&EhhhNhNubj)}(h**size**h]hsize}(hjREhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&Eubh) into }(hj&EhhhNhNubj)}(h**type**h]htype}(hjdEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&Eubh at }(hj&EhhhNhNubj)}(h**idx**h]hidx}(hjvEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&Eubh. }(hj&EhhhNhNubj)}(h**type**h]htype}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&Eubh< must already have extra room to accommodate the new region.}(hj&EhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chM:hjCubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj0hhhNhNubjP)}(hhh]h}(h]h ]h"]h$]h&]entries](j\memblock_add_range (C function)c.memblock_add_rangehNtauh1jOhj0hhhNhNubja)}(hhh](jf)}(hint __init_memblock memblock_add_range (struct memblock_type *type, phys_addr_t base, phys_addr_t size, int nid, enum memblock_flags flags)h]jl)}(hint __init_memblock memblock_add_range(struct memblock_type *type, phys_addr_t base, phys_addr_t size, int nid, enum memblock_flags flags)h](j)}(hinth]hint}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEhhhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMQubj)}(h h]h }(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEhhhjEhMQubh__init_memblock}(hjEhhhNhNubj)}(h h]h }(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEhhhjEhMQubj)}(hmemblock_add_rangeh]j)}(hmemblock_add_rangeh]hmemblock_add_range}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubah}(h]h ](jjeh"]h$]h&]jjuh1jhjEhhhjEhMQubj)}(hd(struct memblock_type *type, phys_addr_t base, phys_addr_t size, int nid, enum memblock_flags flags)h](j)}(hstruct memblock_type *typeh](jr)}(hjh]hstruct}(hjFhhhNhNubah}(h]h ]j~ah"]h$]h&]uh1jqhj Fubj)}(h h]h }(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj Fubh)}(hhh]j)}(h memblock_typeh]h memblock_type}(hj.FhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+Fubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetj0FmodnameN classnameNj j )}j! ]j$ )}j jEsbc.memblock_add_rangeasbuh1hhj Fubj)}(h h]h }(hjNFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj Fubj!)}(hj$h]h*}(hj\FhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1j!hj Fubj)}(htypeh]htype}(hjiFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj Fubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjFubj)}(hphys_addr_t baseh](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetjFmodnameN classnameNj j )}j! ]jJFc.memblock_add_rangeasbuh1hhj~Fubj)}(h h]h }(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~Fubj)}(hbaseh]hbase}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~Fubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjFubj)}(hphys_addr_t sizeh](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetjFmodnameN classnameNj j )}j! ]jJFc.memblock_add_rangeasbuh1hhjFubj)}(h h]h }(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubj)}(hsizeh]hsize}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjFubj)}(hint nidh](j)}(hinth]hint}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubj)}(h h]h }(hj GhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubj)}(hnidh]hnid}(hj.GhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjFubj)}(henum memblock_flags flagsh](jr)}(hjuh]henum}(hjGGhhhNhNubah}(h]h ]j~ah"]h$]h&]uh1jqhjCGubj)}(h h]h }(hjTGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCGubh)}(hhh]j)}(hmemblock_flagsh]hmemblock_flags}(hjeGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbGubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetjgGmodnameN classnameNj j )}j! ]jJFc.memblock_add_rangeasbuh1hhjCGubj)}(h h]h }(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCGubj)}(hflagsh]hflags}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCGubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjFubeh}(h]h ]h"]h$]h&]jjuh1jhjEhhhjEhMQubeh}(h]h ]h"]h$]h&]jjjuh1jkjjhjEhhhjEhMQubah}(h]jEah ](jjeh"]h$]h&]jj)jhuh1jehjEhMQhjEhhubj)}(hhh]h)}(hadd new memblock regionh]hadd new memblock region}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMQhjGhhubah}(h]h ]h"]h$]h&]uh1jhjEhhhjEhMQubeh}(h]h ](hfunctioneh"]h$]h&]jhjjGjjGjjjuh1j`hhhj0hNhNubj)}(hXv**Parameters** ``struct memblock_type *type`` memblock type to add new region into ``phys_addr_t base`` base address of the new region ``phys_addr_t size`` size of the new region ``int nid`` nid of the new region ``enum memblock_flags flags`` flags of the new region **Description** Add new memblock region [**base**, **base** + **size**) into **type**. The new region is allowed to overlap with existing ones - overlaps don't affect already existing regions. **type** is guaranteed to be minimal (all neighbouring compatible regions are merged) after the addition. **Return** 0 on success, -errno on failure.h](h)}(h**Parameters**h]j)}(hjGh]h Parameters}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMUhjGubj)}(hhh](j)}(hD``struct memblock_type *type`` memblock type to add new region into h](j)}(h``struct memblock_type *type``h]h)}(hjGh]hstruct memblock_type *type}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjGubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMRhjGubj3)}(hhh]h)}(h$memblock type to add new region intoh]h$memblock type to add new region into}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjHhMRhjHubah}(h]h ]h"]h$]h&]uh1j2hjGubeh}(h]h ]h"]h$]h&]uh1jhjHhMRhjGubj)}(h4``phys_addr_t base`` base address of the new region h](j)}(h``phys_addr_t base``h]h)}(hj5Hh]hphys_addr_t base}(hj7HhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj3Hubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMShj/Hubj3)}(hhh]h)}(hbase address of the new regionh]hbase address of the new region}(hjNHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjJHhMShjKHubah}(h]h ]h"]h$]h&]uh1j2hj/Hubeh}(h]h ]h"]h$]h&]uh1jhjJHhMShjGubj)}(h,``phys_addr_t size`` size of the new region h](j)}(h``phys_addr_t size``h]h)}(hjnHh]hphys_addr_t size}(hjpHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjlHubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMThjhHubj3)}(hhh]h)}(hsize of the new regionh]hsize of the new region}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjHhMThjHubah}(h]h ]h"]h$]h&]uh1j2hjhHubeh}(h]h ]h"]h$]h&]uh1jhjHhMThjGubj)}(h"``int nid`` nid of the new region h](j)}(h ``int nid``h]h)}(hjHh]hint nid}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjHubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMUhjHubj3)}(hhh]h)}(hnid of the new regionh]hnid of the new region}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjHhMUhjHubah}(h]h ]h"]h$]h&]uh1j2hjHubeh}(h]h ]h"]h$]h&]uh1jhjHhMUhjGubj)}(h6``enum memblock_flags flags`` flags of the new region h](j)}(h``enum memblock_flags flags``h]h)}(hjHh]henum memblock_flags flags}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjHubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMVhjHubj3)}(hhh]h)}(hflags of the new regionh]hflags of the new region}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjHhMVhjHubah}(h]h ]h"]h$]h&]uh1j2hjHubeh}(h]h ]h"]h$]h&]uh1jhjHhMVhjGubeh}(h]h ]h"]h$]h&]uh1j hjGubh)}(h**Description**h]j)}(hjIh]h Description}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMXhjGubh)}(hXAdd new memblock region [**base**, **base** + **size**) into **type**. The new region is allowed to overlap with existing ones - overlaps don't affect already existing regions. **type** is guaranteed to be minimal (all neighbouring compatible regions are merged) after the addition.h](hAdd new memblock region [}(hj1IhhhNhNubj)}(h**base**h]hbase}(hj9IhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1Iubh, }(hj1IhhhNhNubj)}(h**base**h]hbase}(hjKIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1Iubh + }(hj1IhhhNhNubj)}(h**size**h]hsize}(hj]IhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1Iubh) into }(hj1IhhhNhNubj)}(h**type**h]htype}(hjoIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1Iubhp. The new region is allowed to overlap with existing ones - overlaps don’t affect already existing regions. }(hj1IhhhNhNubj)}(h**type**h]htype}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1Iubha is guaranteed to be minimal (all neighbouring compatible regions are merged) after the addition.}(hj1IhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMWhjGubh)}(h **Return**h]j)}(hjIh]hReturn}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chM\hjGubh)}(h 0 on success, -errno on failure.h]h 0 on success, -errno on failure.}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chM]hjGubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj0hhhNhNubjP)}(hhh]h}(h]h ]h"]h$]h&]entries](j\memblock_add_node (C function)c.memblock_add_nodehNtauh1jOhj0hhhNhNubja)}(hhh](jf)}(hnint __init_memblock memblock_add_node (phys_addr_t base, phys_addr_t size, int nid, enum memblock_flags flags)h]jl)}(hmint __init_memblock memblock_add_node(phys_addr_t base, phys_addr_t size, int nid, enum memblock_flags flags)h](j)}(hinth]hint}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIhhhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMubj)}(h h]h }(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIhhhjIhMubh__init_memblock}(hjIhhhNhNubj)}(h h]h }(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIhhhjIhMubj)}(hmemblock_add_nodeh]j)}(hmemblock_add_nodeh]hmemblock_add_node}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubah}(h]h ](jjeh"]h$]h&]jjuh1jhjIhhhjIhMubj)}(hH(phys_addr_t base, phys_addr_t size, int nid, enum memblock_flags flags)h](j)}(hphys_addr_t baseh](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hj3JhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0Jubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetj5JmodnameN classnameNj j )}j! ]j$ )}j jJsbc.memblock_add_nodeasbuh1hhj,Jubj)}(h h]h }(hjSJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,Jubj)}(hbaseh]hbase}(hjaJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,Jubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj(Jubj)}(hphys_addr_t sizeh](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hj}JhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzJubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetjJmodnameN classnameNj j )}j! ]jOJc.memblock_add_nodeasbuh1hhjvJubj)}(h h]h }(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvJubj)}(hsizeh]hsize}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvJubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj(Jubj)}(hint nidh](j)}(hinth]hint}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubj)}(h h]h }(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubj)}(hnidh]hnid}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj(Jubj)}(henum memblock_flags flagsh](jr)}(hjuh]henum}(hjJhhhNhNubah}(h]h ]j~ah"]h$]h&]uh1jqhjJubj)}(h h]h }(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubh)}(hhh]j)}(hmemblock_flagsh]hmemblock_flags}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetjKmodnameN classnameNj j )}j! ]jOJc.memblock_add_nodeasbuh1hhjJubj)}(h h]h }(hj3KhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubj)}(hflagsh]hflags}(hjAKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj(Jubeh}(h]h ]h"]h$]h&]jjuh1jhjIhhhjIhMubeh}(h]h ]h"]h$]h&]jjjuh1jkjjhjIhhhjIhMubah}(h]jIah ](jjeh"]h$]h&]jj)jhuh1jehjIhMhjIhhubj)}(hhh]h)}(h*add new memblock region within a NUMA nodeh]h*add new memblock region within a NUMA node}(hjkKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjhKhhubah}(h]h ]h"]h$]h&]uh1jhjIhhhjIhMubeh}(h]h ](hfunctioneh"]h$]h&]jhjjKjjKjjjuh1j`hhhj0hNhNubj)}(hX**Parameters** ``phys_addr_t base`` base address of the new region ``phys_addr_t size`` size of the new region ``int nid`` nid of the new region ``enum memblock_flags flags`` flags of the new region **Description** Add new memblock region [**base**, **base** + **size**) to the "memory" type. See memblock_add_range() description for mode details **Return** 0 on success, -errno on failure.h](h)}(h**Parameters**h]j)}(hjKh]h Parameters}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjKubj)}(hhh](j)}(h4``phys_addr_t base`` base address of the new region h](j)}(h``phys_addr_t base``h]h)}(hjKh]hphys_addr_t base}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjKubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjKubj3)}(hhh]h)}(hbase address of the new regionh]hbase address of the new region}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjKhMhjKubah}(h]h ]h"]h$]h&]uh1j2hjKubeh}(h]h ]h"]h$]h&]uh1jhjKhMhjKubj)}(h,``phys_addr_t size`` size of the new region h](j)}(h``phys_addr_t size``h]h)}(hjKh]hphys_addr_t size}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjKubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjKubj3)}(hhh]h)}(hsize of the new regionh]hsize of the new region}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjKhMhjKubah}(h]h ]h"]h$]h&]uh1j2hjKubeh}(h]h ]h"]h$]h&]uh1jhjKhMhjKubj)}(h"``int nid`` nid of the new region h](j)}(h ``int nid``h]h)}(hjLh]hint nid}(hj LhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjLubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjLubj3)}(hhh]h)}(hnid of the new regionh]hnid of the new region}(hj7LhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj3LhMhj4Lubah}(h]h ]h"]h$]h&]uh1j2hjLubeh}(h]h ]h"]h$]h&]uh1jhj3LhMhjKubj)}(h6``enum memblock_flags flags`` flags of the new region h](j)}(h``enum memblock_flags flags``h]h)}(hjWLh]henum memblock_flags flags}(hjYLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjULubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjQLubj3)}(hhh]h)}(hflags of the new regionh]hflags of the new region}(hjpLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjlLhMhjmLubah}(h]h ]h"]h$]h&]uh1j2hjQLubeh}(h]h ]h"]h$]h&]uh1jhjlLhMhjKubeh}(h]h ]h"]h$]h&]uh1j hjKubh)}(h**Description**h]j)}(hjLh]h Description}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjKubh)}(hAdd new memblock region [**base**, **base** + **size**) to the "memory" type. See memblock_add_range() description for mode detailsh](hAdd new memblock region [}(hjLhhhNhNubj)}(h**base**h]hbase}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubh, }(hjLhhhNhNubj)}(h**base**h]hbase}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubh + }(hjLhhhNhNubj)}(h**size**h]hsize}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubhQ) to the “memory” type. See memblock_add_range() description for mode details}(hjLhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjKubh)}(h **Return**h]j)}(hjLh]hReturn}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjKubh)}(h 0 on success, -errno on failure.h]h 0 on success, -errno on failure.}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjKubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj0hhhNhNubjP)}(hhh]h}(h]h ]h"]h$]h&]entries](j\memblock_add (C function)c.memblock_addhNtauh1jOhj0hhhNhNubja)}(hhh](jf)}(hEint __init_memblock memblock_add (phys_addr_t base, phys_addr_t size)h]jl)}(hDint __init_memblock memblock_add(phys_addr_t base, phys_addr_t size)h](j)}(hinth]hint}(hj4MhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0MhhhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMubj)}(h h]h }(hjCMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0MhhhjBMhMubh__init_memblock}(hj0MhhhNhNubj)}(h h]h }(hjUMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0MhhhjBMhMubj)}(h memblock_addh]j)}(h memblock_addh]h memblock_add}(hjgMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcMubah}(h]h ](jjeh"]h$]h&]jjuh1jhj0MhhhjBMhMubj)}(h$(phys_addr_t base, phys_addr_t size)h](j)}(hphys_addr_t baseh](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetjMmodnameN classnameNj j )}j! ]j$ )}j jiMsbc.memblock_addasbuh1hhjMubj)}(h h]h }(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubj)}(hbaseh]hbase}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj{Mubj)}(hphys_addr_t sizeh](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetjMmodnameN classnameNj j )}j! ]jMc.memblock_addasbuh1hhjMubj)}(h h]h }(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubj)}(hsizeh]hsize}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj{Mubeh}(h]h ]h"]h$]h&]jjuh1jhj0MhhhjBMhMubeh}(h]h ]h"]h$]h&]jjjuh1jkjjhj,MhhhjBMhMubah}(h]j'Mah ](jjeh"]h$]h&]jj)jhuh1jehjBMhMhj)Mhhubj)}(hhh]h)}(hadd new memblock regionh]hadd new memblock region}(hj&NhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhj#Nhhubah}(h]h ]h"]h$]h&]uh1jhj)MhhhjBMhMubeh}(h]h ](hfunctioneh"]h$]h&]jhjj>Njj>Njjjuh1j`hhhj0hNhNubj)}(hX8**Parameters** ``phys_addr_t base`` base address of the new region ``phys_addr_t size`` size of the new region **Description** Add new memblock region [**base**, **base** + **size**) to the "memory" type. See memblock_add_range() description for mode details **Return** 0 on success, -errno on failure.h](h)}(h**Parameters**h]j)}(hjHNh]h Parameters}(hjJNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjBNubj)}(hhh](j)}(h4``phys_addr_t base`` base address of the new region h](j)}(h``phys_addr_t base``h]h)}(hjgNh]hphys_addr_t base}(hjiNhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjeNubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjaNubj3)}(hhh]h)}(hbase address of the new regionh]hbase address of the new region}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj|NhMhj}Nubah}(h]h ]h"]h$]h&]uh1j2hjaNubeh}(h]h ]h"]h$]h&]uh1jhj|NhMhj^Nubj)}(h,``phys_addr_t size`` size of the new region h](j)}(h``phys_addr_t size``h]h)}(hjNh]hphys_addr_t size}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjNubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjNubj3)}(hhh]h)}(hsize of the new regionh]hsize of the new region}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjNhMhjNubah}(h]h ]h"]h$]h&]uh1j2hjNubeh}(h]h ]h"]h$]h&]uh1jhjNhMhj^Nubeh}(h]h ]h"]h$]h&]uh1j hjBNubh)}(h**Description**h]j)}(hjNh]h Description}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjBNubh)}(hAdd new memblock region [**base**, **base** + **size**) to the "memory" type. See memblock_add_range() description for mode detailsh](hAdd new memblock region [}(hjNhhhNhNubj)}(h**base**h]hbase}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubh, }(hjNhhhNhNubj)}(h**base**h]hbase}(hj OhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubh + }(hjNhhhNhNubj)}(h**size**h]hsize}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubhQ) to the “memory” type. See memblock_add_range() description for mode details}(hjNhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjBNubh)}(h **Return**h]j)}(hj8Oh]hReturn}(hj:OhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6Oubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjBNubh)}(h 0 on success, -errno on failure.h]h 0 on success, -errno on failure.}(hjNOhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjBNubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj0hhhNhNubjP)}(hhh]h}(h]h ]h"]h$]h&]entries](j\,memblock_validate_numa_coverage (C function)!c.memblock_validate_numa_coveragehNtauh1jOhj0hhhNhNubja)}(hhh](jf)}(hTbool __init_memblock memblock_validate_numa_coverage (unsigned long threshold_bytes)h]jl)}(hSbool __init_memblock memblock_validate_numa_coverage(unsigned long threshold_bytes)h](j)}(hboolh]hbool}(hj}OhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyOhhhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMubj)}(h h]h }(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyOhhhjOhMubh__init_memblock}(hjyOhhhNhNubj)}(h h]h }(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyOhhhjOhMubj)}(hmemblock_validate_numa_coverageh]j)}(hmemblock_validate_numa_coverageh]hmemblock_validate_numa_coverage}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubah}(h]h ](jjeh"]h$]h&]jjuh1jhjyOhhhjOhMubj)}(h(unsigned long threshold_bytes)h]j)}(hunsigned long threshold_bytesh](j)}(hunsignedh]hunsigned}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubj)}(h h]h }(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubj)}(hlongh]hlong}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubj)}(h h]h }(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubj)}(hthreshold_bytesh]hthreshold_bytes}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjOubah}(h]h ]h"]h$]h&]jjuh1jhjyOhhhjOhMubeh}(h]h ]h"]h$]h&]jjjuh1jkjjhjuOhhhjOhMubah}(h]jpOah ](jjeh"]h$]h&]jj)jhuh1jehjOhMhjrOhhubj)}(hhh]h)}(hKcheck if amount of memory with no node ID assigned is less than a thresholdh]hKcheck if amount of memory with no node ID assigned is less than a threshold}(hj.PhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhj+Phhubah}(h]h ]h"]h$]h&]uh1jhjrOhhhjOhMubeh}(h]h ](hfunctioneh"]h$]h&]jhjjFPjjFPjjjuh1j`hhhj0hNhNubj)}(hX:**Parameters** ``unsigned long threshold_bytes`` maximal memory size that can have unassigned node ID (in bytes). **Description** A buggy firmware may report memory that does not belong to any node. Check if amount of such memory is below **threshold_bytes**. **Return** true on success, false on failure.h](h)}(h**Parameters**h]j)}(hjPPh]h Parameters}(hjRPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNPubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjJPubj)}(hhh]j)}(hc``unsigned long threshold_bytes`` maximal memory size that can have unassigned node ID (in bytes). h](j)}(h!``unsigned long threshold_bytes``h]h)}(hjoPh]hunsigned long threshold_bytes}(hjqPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjmPubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjiPubj3)}(hhh]h)}(h@maximal memory size that can have unassigned node ID (in bytes).h]h@maximal memory size that can have unassigned node ID (in bytes).}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjPubah}(h]h ]h"]h$]h&]uh1j2hjiPubeh}(h]h ]h"]h$]h&]uh1jhjPhMhjfPubah}(h]h ]h"]h$]h&]uh1j hjJPubh)}(h**Description**h]j)}(hjPh]h Description}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjJPubh)}(hA buggy firmware may report memory that does not belong to any node. Check if amount of such memory is below **threshold_bytes**.h](hmA buggy firmware may report memory that does not belong to any node. Check if amount of such memory is below }(hjPhhhNhNubj)}(h**threshold_bytes**h]hthreshold_bytes}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubh.}(hjPhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjJPubh)}(h **Return**h]j)}(hjPh]hReturn}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjJPubh)}(h"true on success, false on failure.h]h"true on success, false on failure.}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjJPubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj0hhhNhNubjP)}(hhh]h}(h]h ]h"]h$]h&]entries](j\#memblock_isolate_range (C function)c.memblock_isolate_rangehNtauh1jOhj0hhhNhNubja)}(hhh](jf)}(hint __init_memblock memblock_isolate_range (struct memblock_type *type, phys_addr_t base, phys_addr_t size, int *start_rgn, int *end_rgn)h]jl)}(hint __init_memblock memblock_isolate_range(struct memblock_type *type, phys_addr_t base, phys_addr_t size, int *start_rgn, int *end_rgn)h](j)}(hinth]hint}(hj)QhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%QhhhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMubj)}(h h]h }(hj8QhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%Qhhhj7QhMubh__init_memblock}(hj%QhhhNhNubj)}(h h]h }(hjJQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%Qhhhj7QhMubj)}(hmemblock_isolate_rangeh]j)}(hmemblock_isolate_rangeh]hmemblock_isolate_range}(hj\QhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXQubah}(h]h ](jjeh"]h$]h&]jjuh1jhj%Qhhhj7QhMubj)}(h^(struct memblock_type *type, phys_addr_t base, phys_addr_t size, int *start_rgn, int *end_rgn)h](j)}(hstruct memblock_type *typeh](jr)}(hjh]hstruct}(hjxQhhhNhNubah}(h]h ]j~ah"]h$]h&]uh1jqhjtQubj)}(h h]h }(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtQubh)}(hhh]j)}(h memblock_typeh]h memblock_type}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetjQmodnameN classnameNj j )}j! ]j$ )}j j^Qsbc.memblock_isolate_rangeasbuh1hhjtQubj)}(h h]h }(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtQubj!)}(hj$h]h*}(hjQhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1j!hjtQubj)}(htypeh]htype}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtQubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjpQubj)}(hphys_addr_t baseh](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetjQmodnameN classnameNj j )}j! ]jQc.memblock_isolate_rangeasbuh1hhjQubj)}(h h]h }(hj RhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubj)}(hbaseh]hbase}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjpQubj)}(hphys_addr_t sizeh](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hj5RhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2Rubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetj7RmodnameN classnameNj j )}j! ]jQc.memblock_isolate_rangeasbuh1hhj.Rubj)}(h h]h }(hjSRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.Rubj)}(hsizeh]hsize}(hjaRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.Rubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjpQubj)}(hint *start_rgnh](j)}(hinth]hint}(hjzRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvRubj)}(h h]h }(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvRubj!)}(hj$h]h*}(hjRhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1j!hjvRubj)}(h start_rgnh]h start_rgn}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvRubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjpQubj)}(h int *end_rgnh](j)}(hinth]hint}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubj)}(h h]h }(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubj!)}(hj$h]h*}(hjRhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1j!hjRubj)}(hend_rgnh]hend_rgn}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjpQubeh}(h]h ]h"]h$]h&]jjuh1jhj%Qhhhj7QhMubeh}(h]h ]h"]h$]h&]jjjuh1jkjjhj!Qhhhj7QhMubah}(h]jQah ](jjeh"]h$]h&]jj)jhuh1jehj7QhMhjQhhubj)}(hhh]h)}(h+isolate given range into disjoint memblocksh]h+isolate given range into disjoint memblocks}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhj Shhubah}(h]h ]h"]h$]h&]uh1jhjQhhhj7QhMubeh}(h]h ](hfunctioneh"]h$]h&]jhjj'Sjj'Sjjjuh1j`hhhj0hNhNubj)}(hX**Parameters** ``struct memblock_type *type`` memblock type to isolate range for ``phys_addr_t base`` base of range to isolate ``phys_addr_t size`` size of range to isolate ``int *start_rgn`` out parameter for the start of isolated region ``int *end_rgn`` out parameter for the end of isolated region **Description** Walk **type** and ensure that regions don't cross the boundaries defined by [**base**, **base** + **size**). Crossing regions are split at the boundaries, which may create at most two more regions. The index of the first region inside the range is returned in ***start_rgn** and the index of the first region after the range is returned in ***end_rgn**. **Return** 0 on success, -errno on failure.h](h)}(h**Parameters**h]j)}(hj1Sh]h Parameters}(hj3ShhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/Subah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhj+Subj)}(hhh](j)}(hB``struct memblock_type *type`` memblock type to isolate range for h](j)}(h``struct memblock_type *type``h]h)}(hjPSh]hstruct memblock_type *type}(hjRShhhNhNubah}(h]h ]h"]h$]h&]uh1hhjNSubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjJSubj3)}(hhh]h)}(h"memblock type to isolate range forh]h"memblock type to isolate range for}(hjiShhhNhNubah}(h]h ]h"]h$]h&]uh1hhjeShMhjfSubah}(h]h ]h"]h$]h&]uh1j2hjJSubeh}(h]h ]h"]h$]h&]uh1jhjeShMhjGSubj)}(h.``phys_addr_t base`` base of range to isolate h](j)}(h``phys_addr_t base``h]h)}(hjSh]hphys_addr_t base}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhjSubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjSubj3)}(hhh]h)}(hbase of range to isolateh]hbase of range to isolate}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhjShMhjSubah}(h]h ]h"]h$]h&]uh1j2hjSubeh}(h]h ]h"]h$]h&]uh1jhjShMhjGSubj)}(h.``phys_addr_t size`` size of range to isolate h](j)}(h``phys_addr_t size``h]h)}(hjSh]hphys_addr_t size}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhjSubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjSubj3)}(hhh]h)}(hsize of range to isolateh]hsize of range to isolate}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhjShMhjSubah}(h]h ]h"]h$]h&]uh1j2hjSubeh}(h]h ]h"]h$]h&]uh1jhjShMhjGSubj)}(hB``int *start_rgn`` out parameter for the start of isolated region h](j)}(h``int *start_rgn``h]h)}(hjSh]hint *start_rgn}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhjSubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjSubj3)}(hhh]h)}(h.out parameter for the start of isolated regionh]h.out parameter for the start of isolated region}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hhjThMhjTubah}(h]h ]h"]h$]h&]uh1j2hjSubeh}(h]h ]h"]h$]h&]uh1jhjThMhjGSubj)}(h>``int *end_rgn`` out parameter for the end of isolated region h](j)}(h``int *end_rgn``h]h)}(hj4Th]h int *end_rgn}(hj6ThhhNhNubah}(h]h ]h"]h$]h&]uh1hhj2Tubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhj.Tubj3)}(hhh]h)}(h,out parameter for the end of isolated regionh]h,out parameter for the end of isolated region}(hjMThhhNhNubah}(h]h ]h"]h$]h&]uh1hhjIThMhjJTubah}(h]h ]h"]h$]h&]uh1j2hj.Tubeh}(h]h ]h"]h$]h&]uh1jhjIThMhjGSubeh}(h]h ]h"]h$]h&]uh1j hj+Subh)}(h**Description**h]j)}(hjoTh]h Description}(hjqThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmTubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chM!hj+Subh)}(hXcWalk **type** and ensure that regions don't cross the boundaries defined by [**base**, **base** + **size**). Crossing regions are split at the boundaries, which may create at most two more regions. The index of the first region inside the range is returned in ***start_rgn** and the index of the first region after the range is returned in ***end_rgn**.h](hWalk }(hjThhhNhNubj)}(h**type**h]htype}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubhB and ensure that regions don’t cross the boundaries defined by [}(hjThhhNhNubj)}(h**base**h]hbase}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubh, }(hjThhhNhNubj)}(h**base**h]hbase}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubh + }(hjThhhNhNubj)}(h**size**h]hsize}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubh). Crossing regions are split at the boundaries, which may create at most two more regions. The index of the first region inside the range is returned in }(hjThhhNhNubj)}(h***start_rgn**h]h *start_rgn}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubhB and the index of the first region after the range is returned in }(hjThhhNhNubj)}(h ***end_rgn**h]h*end_rgn}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubh.}(hjThhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chM hj+Subh)}(h **Return**h]j)}(hjUh]hReturn}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chM&hj+Subh)}(h 0 on success, -errno on failure.h]h 0 on success, -errno on failure.}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chM'hj+Subeh}(h]h ] kernelindentah"]h$]h&]uh1jhj0hhhNhNubjP)}(hhh]h}(h]h ]h"]h$]h&]entries](j\memblock_free (C function)c.memblock_freehNtauh1jOhj0hhhNhNubja)}(hhh](jf)}(h;void __init_memblock memblock_free (void *ptr, size_t size)h]jl)}(h:void __init_memblock memblock_free(void *ptr, size_t size)h](j)}(hvoidh]hvoid}(hjGUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCUhhhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMubj)}(h h]h }(hjVUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCUhhhjUUhMubh__init_memblock}(hjCUhhhNhNubj)}(h h]h }(hjhUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCUhhhjUUhMubj)}(h memblock_freeh]j)}(h memblock_freeh]h memblock_free}(hjzUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvUubah}(h]h ](jjeh"]h$]h&]jjuh1jhjCUhhhjUUhMubj)}(h(void *ptr, size_t size)h](j)}(h void *ptrh](j)}(hvoidh]hvoid}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubj)}(h h]h }(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubj!)}(hj$h]h*}(hjUhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1j!hjUubj)}(hptrh]hptr}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjUubj)}(h size_t sizeh](h)}(hhh]j)}(hsize_th]hsize_t}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetjUmodnameN classnameNj j )}j! ]j$ )}j j|Usbc.memblock_freeasbuh1hhjUubj)}(h h]h }(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubj)}(hsizeh]hsize}(hj VhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjUubeh}(h]h ]h"]h$]h&]jjuh1jhjCUhhhjUUhMubeh}(h]h ]h"]h$]h&]jjjuh1jkjjhj?UhhhjUUhMubah}(h]j:Uah ](jjeh"]h$]h&]jj)jhuh1jehjUUhMhj``void *ptr`` starting address of the boot memory allocation h](j)}(h ``void *ptr``h]h)}(hjtVh]h void *ptr}(hjvVhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjrVubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjnVubj3)}(hhh]h)}(h/starting address of the boot memory allocationh]h/starting address of the boot memory allocation}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjVhMhjVubah}(h]h ]h"]h$]h&]uh1j2hjnVubeh}(h]h ]h"]h$]h&]uh1jhjVhMhjkVubj)}(h7``size_t size`` size of the boot memory block in bytes h](j)}(h``size_t size``h]h)}(hjVh]h size_t size}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjVubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjVubj3)}(hhh]h)}(h&size of the boot memory block in bytesh]h&size of the boot memory block in bytes}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjVhMhjVubah}(h]h ]h"]h$]h&]uh1j2hjVubeh}(h]h ]h"]h$]h&]uh1jhjVhMhjkVubeh}(h]h ]h"]h$]h&]uh1j hjOVubh)}(h**Description**h]j)}(hjVh]h Description}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjOVubh)}(hFree boot memory block previously allocated by memblock_alloc_xx() API. The freeing memory will not be released to the buddy allocator.h]hFree boot memory block previously allocated by memblock_alloc_xx() API. The freeing memory will not be released to the buddy allocator.}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjOVubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj0hhhNhNubjP)}(hhh]h}(h]h ]h"]h$]h&]entries](j\memblock_phys_free (C function)c.memblock_phys_freehNtauh1jOhj0hhhNhNubja)}(hhh](jf)}(hKint __init_memblock memblock_phys_free (phys_addr_t base, phys_addr_t size)h]jl)}(hJint __init_memblock memblock_phys_free(phys_addr_t base, phys_addr_t size)h](j)}(hinth]hint}(hj-WhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)WhhhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMubj)}(h h]h }(hjesbc.memblock_clear_nomapasbuh1hhjTeubj)}(h h]h }(hj{ehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTeubj)}(hbaseh]hbase}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTeubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjPeubj)}(hphys_addr_t sizeh](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetjemodnameN classnameNj j )}j! ]jwec.memblock_clear_nomapasbuh1hhjeubj)}(h h]h }(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubj)}(hsizeh]hsize}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjPeubeh}(h]h ]h"]h$]h&]jjuh1jhjehhhjehM9ubeh}(h]h ]h"]h$]h&]jjjuh1jkjjhjehhhjehM9ubah}(h]jdah ](jjeh"]h$]h&]jj)jhuh1jehjehM9hjdhhubj)}(hhh]h)}(h1Clear flag MEMBLOCK_NOMAP for a specified region.h]h1Clear flag MEMBLOCK_NOMAP for a specified region.}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chM9hjehhubah}(h]h ]h"]h$]h&]uh1jhjdhhhjehM9ubeh}(h]h ](hfunctioneh"]h$]h&]jhjjfjjfjjjuh1j`hhhj0hNhNubj)}(h**Parameters** ``phys_addr_t base`` the base phys addr of the region ``phys_addr_t size`` the size of the region **Return** 0 on success, -errno on failure.h](h)}(h**Parameters**h]j)}(hjfh]h Parameters}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chM=hjfubj)}(hhh](j)}(h6``phys_addr_t base`` the base phys addr of the region h](j)}(h``phys_addr_t base``h]h)}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj:fubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chM:hj6fubj3)}(hhh]h)}(h the base phys addr of the regionh]h the base phys addr of the region}(hjUfhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjQfhM:hjRfubah}(h]h ]h"]h$]h&]uh1j2hj6fubeh}(h]h ]h"]h$]h&]uh1jhjQfhM:hj3fubj)}(h,``phys_addr_t size`` the size of the region h](j)}(h``phys_addr_t size``h]h)}(hjufh]hphys_addr_t size}(hjwfhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjsfubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chM;hjofubj3)}(hhh]h)}(hthe size of the regionh]hthe size of the region}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjfhM;hjfubah}(h]h ]h"]h$]h&]uh1j2hjofubeh}(h]h ]h"]h$]h&]uh1jhjfhM;hj3fubeh}(h]h ]h"]h$]h&]uh1j hjfubh)}(h **Return**h]j)}(hjfh]hReturn}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chM=hjfubh)}(h 0 on success, -errno on failure.h]h 0 on success, -errno on failure.}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chM=hjfubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj0hhhNhNubjP)}(hhh]h}(h]h ]h"]h$]h&]entries](j\*memblock_reserved_mark_noinit (C function)c.memblock_reserved_mark_noinithNtauh1jOhj0hhhNhNubja)}(hhh](jf)}(hVint __init_memblock memblock_reserved_mark_noinit (phys_addr_t base, phys_addr_t size)h]jl)}(hUint __init_memblock memblock_reserved_mark_noinit(phys_addr_t base, phys_addr_t size)h](j)}(hinth]hint}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfhhhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMEubj)}(h h]h }(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfhhhjghMEubh__init_memblock}(hjfhhhNhNubj)}(h h]h }(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfhhhjghMEubj)}(hmemblock_reserved_mark_noinith]j)}(hmemblock_reserved_mark_noinith]hmemblock_reserved_mark_noinit}(hj(ghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$gubah}(h]h ](jjeh"]h$]h&]jjuh1jhjfhhhjghMEubj)}(h$(phys_addr_t base, phys_addr_t size)h](j)}(hphys_addr_t baseh](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hjGghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDgubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetjIgmodnameN classnameNj j )}j! ]j$ )}j j*gsbc.memblock_reserved_mark_noinitasbuh1hhj@gubj)}(h h]h }(hjgghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@gubj)}(hbaseh]hbase}(hjughhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@gubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjhubah}(h]h ]h"]h$]h&]uh1j2hj"hubeh}(h]h ]h"]h$]h&]uh1jhj=hhMHhjhubj)}(h,``phys_addr_t size`` the size of the region h](j)}(h``phys_addr_t size``h]h)}(hjahh]hphys_addr_t size}(hjchhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj_hubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMIhj[hubj3)}(hhh]h)}(hthe size of the regionh]hthe size of the region}(hjzhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjvhhMIhjwhubah}(h]h ]h"]h$]h&]uh1j2hj[hubeh}(h]h ]h"]h$]h&]uh1jhjvhhMIhjhubeh}(h]h ]h"]h$]h&]uh1j hjhubh)}(h**Description**h]j)}(hjhh]h Description}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMKhjhubh)}(hThe struct pages for the reserved regions marked ``MEMBLOCK_RSRV_NOINIT`` will not be fully initialized to allow the caller optimize their initialization.h](h1The struct pages for the reserved regions marked }(hjhhhhNhNubh)}(h``MEMBLOCK_RSRV_NOINIT``h]hMEMBLOCK_RSRV_NOINIT}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhubhQ will not be fully initialized to allow the caller optimize their initialization.}(hjhhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMJhjhubh)}(hWhen ``CONFIG_DEFERRED_STRUCT_PAGE_INIT`` is enabled, setting this flag completely bypasses the initialization of struct pages for such region.h](hWhen }(hjhhhhNhNubh)}(h$``CONFIG_DEFERRED_STRUCT_PAGE_INIT``h]h CONFIG_DEFERRED_STRUCT_PAGE_INIT}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhubhf is enabled, setting this flag completely bypasses the initialization of struct pages for such region.}(hjhhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMMhjhubh)}(hWhen ``CONFIG_DEFERRED_STRUCT_PAGE_INIT`` is disabled, struct pages in this region will be initialized with default values but won't be marked as reserved.h](hWhen }(hjhhhhNhNubh)}(h$``CONFIG_DEFERRED_STRUCT_PAGE_INIT``h]h CONFIG_DEFERRED_STRUCT_PAGE_INIT}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhubht is disabled, struct pages in this region will be initialized with default values but won’t be marked as reserved.}(hjhhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMPhjhubh)}(h **Return**h]j)}(hjih]hReturn}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjiubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMThjhubh)}(h 0 on success, -errno on failure.h]h 0 on success, -errno on failure.}(hj-ihhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMUhjhubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj0hhhNhNubjP)}(hhh]h}(h]h ]h"]h$]h&]entries](j\&memblock_mark_kho_scratch (C function)c.memblock_mark_kho_scratchhNtauh1jOhj0hhhNhNubja)}(hhh](jf)}(hBint memblock_mark_kho_scratch (phys_addr_t base, phys_addr_t size)h]jl)}(hAint memblock_mark_kho_scratch(phys_addr_t base, phys_addr_t size)h](j)}(hinth]hint}(hj\ihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXihhhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chM^ubj)}(h h]h }(hjkihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXihhhjjihM^ubj)}(hmemblock_mark_kho_scratchh]j)}(hmemblock_mark_kho_scratchh]hmemblock_mark_kho_scratch}(hj}ihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyiubah}(h]h ](jjeh"]h$]h&]jjuh1jhjXihhhjjihM^ubj)}(h$(phys_addr_t base, phys_addr_t size)h](j)}(hphys_addr_t baseh](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetjimodnameN classnameNj j )}j! ]j$ )}j jisbc.memblock_mark_kho_scratchasbuh1hhjiubj)}(h h]h }(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubj)}(hbaseh]hbase}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjiubj)}(hphys_addr_t sizeh](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetjimodnameN classnameNj j )}j! ]jic.memblock_mark_kho_scratchasbuh1hhjiubj)}(h h]h }(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubj)}(hsizeh]hsize}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjiubeh}(h]h ]h"]h$]h&]jjuh1jhjXihhhjjihM^ubeh}(h]h ]h"]h$]h&]jjjuh1jkjjhjTihhhjjihM^ubah}(h]jOiah ](jjeh"]h$]h&]jj)jhuh1jehjjihM^hjQihhubj)}(hhh]h)}(h-Mark a memory region as MEMBLOCK_KHO_SCRATCH.h]h-Mark a memory region as MEMBLOCK_KHO_SCRATCH.}(hjmhhubj)}(hhh]h)}(h0next function for for_each_free_mem_range() etc.h]h0next function for for_each_free_mem_range() etc.}(hjRphhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjOphhubah}(h]h ]h"]h$]h&]uh1jhj>mhhhjWmhMubeh}(h]h ](hfunctioneh"]h$]h&]jhjjjpjjjpjjjuh1j`hhhj0hNhNubj)}(hX**Parameters** ``u64 *idx`` pointer to u64 loop variable ``int nid`` node selector, ``NUMA_NO_NODE`` for all nodes ``enum memblock_flags flags`` pick from blocks based on memory attributes ``struct memblock_type *type_a`` pointer to memblock_type from where the range is taken ``struct memblock_type *type_b`` pointer to memblock_type which excludes memory from being taken ``phys_addr_t *out_start`` ptr to phys_addr_t for start address of the range, can be ``NULL`` ``phys_addr_t *out_end`` ptr to phys_addr_t for end address of the range, can be ``NULL`` ``int *out_nid`` ptr to int for nid of the range, can be ``NULL`` **Description** Find the first area from ***idx** which matches **nid**, fill the out parameters, and update ***idx** for the next iteration. The lower 32bit of ***idx** contains index into type_a and the upper 32bit indexes the areas before each region in type_b. For example, if type_b regions look like the following, 0:[0-16), 1:[32-48), 2:[128-130) The upper 32bit indexes the following regions. 0:[0-0), 1:[16-32), 2:[48-128), 3:[130-MAX) As both region arrays are sorted, the function advances the two indices in lockstep and returns each intersection.h](h)}(h**Parameters**h]j)}(hjtph]h Parameters}(hjvphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrpubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjnpubj)}(hhh](j)}(h*``u64 *idx`` pointer to u64 loop variable h](j)}(h ``u64 *idx``h]h)}(hjph]hu64 *idx}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hhjpubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjpubj3)}(hhh]h)}(hpointer to u64 loop variableh]hpointer to u64 loop variable}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hhjphMhjpubah}(h]h ]h"]h$]h&]uh1j2hjpubeh}(h]h ]h"]h$]h&]uh1jhjphMhjpubj)}(h:``int nid`` node selector, ``NUMA_NO_NODE`` for all nodes h](j)}(h ``int nid``h]h)}(hjph]hint nid}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hhjpubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjpubj3)}(hhh]h)}(h-node selector, ``NUMA_NO_NODE`` for all nodesh](hnode selector, }(hjphhhNhNubh)}(h``NUMA_NO_NODE``h]h NUMA_NO_NODE}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hhjpubh for all nodes}(hjphhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjphMhjpubah}(h]h ]h"]h$]h&]uh1j2hjpubeh}(h]h ]h"]h$]h&]uh1jhjphMhjpubj)}(hJ``enum memblock_flags flags`` pick from blocks based on memory attributes h](j)}(h``enum memblock_flags flags``h]h)}(hjqh]henum memblock_flags flags}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjqubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjqubj3)}(hhh]h)}(h+pick from blocks based on memory attributesh]h+pick from blocks based on memory attributes}(hj0qhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj,qhMhj-qubah}(h]h ]h"]h$]h&]uh1j2hjqubeh}(h]h ]h"]h$]h&]uh1jhj,qhMhjpubj)}(hX``struct memblock_type *type_a`` pointer to memblock_type from where the range is taken h](j)}(h ``struct memblock_type *type_a``h]h)}(hjPqh]hstruct memblock_type *type_a}(hjRqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjNqubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjJqubj3)}(hhh]h)}(h6pointer to memblock_type from where the range is takenh]h6pointer to memblock_type from where the range is taken}(hjiqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjeqhMhjfqubah}(h]h ]h"]h$]h&]uh1j2hjJqubeh}(h]h ]h"]h$]h&]uh1jhjeqhMhjpubj)}(ha``struct memblock_type *type_b`` pointer to memblock_type which excludes memory from being taken h](j)}(h ``struct memblock_type *type_b``h]h)}(hjqh]hstruct memblock_type *type_b}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjqubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjqubj3)}(hhh]h)}(h?pointer to memblock_type which excludes memory from being takenh]h?pointer to memblock_type which excludes memory from being taken}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjqhMhjqubah}(h]h ]h"]h$]h&]uh1j2hjqubeh}(h]h ]h"]h$]h&]uh1jhjqhMhjpubj)}(h^``phys_addr_t *out_start`` ptr to phys_addr_t for start address of the range, can be ``NULL`` h](j)}(h``phys_addr_t *out_start``h]h)}(hjqh]hphys_addr_t *out_start}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjqubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjqubj3)}(hhh]h)}(hBptr to phys_addr_t for start address of the range, can be ``NULL``h](h:ptr to phys_addr_t for start address of the range, can be }(hjqhhhNhNubh)}(h``NULL``h]hNULL}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjqubeh}(h]h ]h"]h$]h&]uh1hhjqhMhjqubah}(h]h ]h"]h$]h&]uh1j2hjqubeh}(h]h ]h"]h$]h&]uh1jhjqhMhjpubj)}(hZ``phys_addr_t *out_end`` ptr to phys_addr_t for end address of the range, can be ``NULL`` h](j)}(h``phys_addr_t *out_end``h]h)}(hj rh]hphys_addr_t *out_end}(hj rhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjrubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjrubj3)}(hhh]h)}(h@ptr to phys_addr_t for end address of the range, can be ``NULL``h](h8ptr to phys_addr_t for end address of the range, can be }(hj"rhhhNhNubh)}(h``NULL``h]hNULL}(hj*rhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj"rubeh}(h]h ]h"]h$]h&]uh1hhjrhMhjrubah}(h]h ]h"]h$]h&]uh1j2hjrubeh}(h]h ]h"]h$]h&]uh1jhjrhMhjpubj)}(hB``int *out_nid`` ptr to int for nid of the range, can be ``NULL`` h](j)}(h``int *out_nid``h]h)}(hjPrh]h int *out_nid}(hjRrhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjNrubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjJrubj3)}(hhh]h)}(h0ptr to int for nid of the range, can be ``NULL``h](h(ptr to int for nid of the range, can be }(hjirhhhNhNubh)}(h``NULL``h]hNULL}(hjqrhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjirubeh}(h]h ]h"]h$]h&]uh1hhjerhMhjfrubah}(h]h ]h"]h$]h&]uh1j2hjJrubeh}(h]h ]h"]h$]h&]uh1jhjerhMhjpubeh}(h]h ]h"]h$]h&]uh1j hjnpubh)}(h**Description**h]j)}(hjrh]h Description}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjnpubh)}(hX2Find the first area from ***idx** which matches **nid**, fill the out parameters, and update ***idx** for the next iteration. The lower 32bit of ***idx** contains index into type_a and the upper 32bit indexes the areas before each region in type_b. For example, if type_b regions look like the following,h](hFind the first area from }(hjrhhhNhNubj)}(h***idx**h]h*idx}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubh which matches }(hjrhhhNhNubj)}(h**nid**h]hnid}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubh&, fill the out parameters, and update }(hjrhhhNhNubj)}(h***idx**h]h*idx}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubh- for the next iteration. The lower 32bit of }(hjrhhhNhNubj)}(h***idx**h]h*idx}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubh contains index into type_a and the upper 32bit indexes the areas before each region in type_b. For example, if type_b regions look like the following,}(hjrhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjnpubj )}(h!0:[0-16), 1:[32-48), 2:[128-130) h]h)}(h 0:[0-16), 1:[32-48), 2:[128-130)h]h 0:[0-16), 1:[32-48), 2:[128-130)}(hj shhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjsubah}(h]h ]h"]h$]h&]uh1j hjshMhjnpubh)}(h.The upper 32bit indexes the following regions.h]h.The upper 32bit indexes the following regions.}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjnpubj )}(h,0:[0-0), 1:[16-32), 2:[48-128), 3:[130-MAX) h]h)}(h+0:[0-0), 1:[16-32), 2:[48-128), 3:[130-MAX)h]h+0:[0-0), 1:[16-32), 2:[48-128), 3:[130-MAX)}(hj2shhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhj.subah}(h]h ]h"]h$]h&]uh1j hj@shMhjnpubh)}(hrAs both region arrays are sorted, the function advances the two indices in lockstep and returns each intersection.h]hrAs both region arrays are sorted, the function advances the two indices in lockstep and returns each intersection.}(hjGshhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjnpubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj0hhhNhNubjP)}(hhh]h}(h]h ]h"]h$]h&]entries](j\!__next_mem_range_rev (C function)c.__next_mem_range_revhNtauh1jOhj0hhhNhNubja)}(hhh](jf)}(hvoid __init_memblock __next_mem_range_rev (u64 *idx, int nid, enum memblock_flags flags, struct memblock_type *type_a, struct memblock_type *type_b, phys_addr_t *out_start, phys_addr_t *out_end, int *out_nid)h]jl)}(hvoid __init_memblock __next_mem_range_rev(u64 *idx, int nid, enum memblock_flags flags, struct memblock_type *type_a, struct memblock_type *type_b, phys_addr_t *out_start, phys_addr_t *out_end, int *out_nid)h](j)}(hvoidh]hvoid}(hjvshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrshhhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chM ubj)}(h h]h }(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrshhhjshM ubh__init_memblock}(hjrshhhNhNubj)}(h h]h }(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrshhhjshM ubj)}(h__next_mem_range_revh]j)}(h__next_mem_range_revh]h__next_mem_range_rev}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubah}(h]h ](jjeh"]h$]h&]jjuh1jhjrshhhjshM ubj)}(h(u64 *idx, int nid, enum memblock_flags flags, struct memblock_type *type_a, struct memblock_type *type_b, phys_addr_t *out_start, phys_addr_t *out_end, int *out_nid)h](j)}(hu64 *idxh](h)}(hhh]j)}(hu64h]hu64}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetjsmodnameN classnameNj j )}j! ]j$ )}j jssbc.__next_mem_range_revasbuh1hhjsubj)}(h h]h }(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubj!)}(hj$h]h*}(hjshhhNhNubah}(h]h ]j!ah"]h$]h&]uh1j!hjsubj)}(hidxh]hidx}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjsubj)}(hint nidh](j)}(hinth]hint}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubj)}(h h]h }(hj*thhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubj)}(hnidh]hnid}(hj8thhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjsubj)}(henum memblock_flags flagsh](jr)}(hjuh]henum}(hjQthhhNhNubah}(h]h ]j~ah"]h$]h&]uh1jqhjMtubj)}(h h]h }(hj^thhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMtubh)}(hhh]j)}(hmemblock_flagsh]hmemblock_flags}(hjothhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjltubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetjqtmodnameN classnameNj j )}j! ]jsc.__next_mem_range_revasbuh1hhjMtubj)}(h h]h }(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMtubj)}(hflagsh]hflags}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMtubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjsubj)}(hstruct memblock_type *type_ah](jr)}(hjh]hstruct}(hjthhhNhNubah}(h]h ]j~ah"]h$]h&]uh1jqhjtubj)}(h h]h }(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubh)}(hhh]j)}(h memblock_typeh]h memblock_type}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetjtmodnameN classnameNj j )}j! ]jsc.__next_mem_range_revasbuh1hhjtubj)}(h h]h }(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubj!)}(hj$h]h*}(hjthhhNhNubah}(h]h ]j!ah"]h$]h&]uh1j!hjtubj)}(htype_ah]htype_a}(hj uhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjsubj)}(hstruct memblock_type *type_bh](jr)}(hjh]hstruct}(hj$uhhhNhNubah}(h]h ]j~ah"]h$]h&]uh1jqhj uubj)}(h h]h }(hj1uhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj uubh)}(hhh]j)}(h memblock_typeh]h memblock_type}(hjBuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?uubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetjDumodnameN classnameNj j )}j! ]jsc.__next_mem_range_revasbuh1hhj uubj)}(h h]h }(hj`uhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj uubj!)}(hj$h]h*}(hjnuhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1j!hj uubj)}(htype_bh]htype_b}(hj{uhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj uubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjsubj)}(hphys_addr_t *out_starth](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetjumodnameN classnameNj j )}j! ]jsc.__next_mem_range_revasbuh1hhjuubj)}(h h]h }(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubj!)}(hj$h]h*}(hjuhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1j!hjuubj)}(h out_starth]h out_start}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjsubj)}(hphys_addr_t *out_endh](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetjumodnameN classnameNj j )}j! ]jsc.__next_mem_range_revasbuh1hhjuubj)}(h h]h }(hj vhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubj!)}(hj$h]h*}(hjvhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1j!hjuubj)}(hout_endh]hout_end}(hj%vhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjsubj)}(h int *out_nidh](j)}(hinth]hint}(hj>vhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:vubj)}(h h]h }(hjLvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:vubj!)}(hj$h]h*}(hjZvhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1j!hj:vubj)}(hout_nidh]hout_nid}(hjgvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:vubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjsubeh}(h]h ]h"]h$]h&]jjuh1jhjrshhhjshM ubeh}(h]h ]h"]h$]h&]jjjuh1jkjjhjnshhhjshM ubah}(h]jisah ](jjeh"]h$]h&]jj)jhuh1jehjshM hjkshhubj)}(hhh]h)}(h0generic next function for for_each_*_range_rev()h]h0generic next function for for_each_*_range_rev()}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chM hjvhhubah}(h]h ]h"]h$]h&]uh1jhjkshhhjshM ubeh}(h]h ](hfunctioneh"]h$]h&]jhjjvjjvjjjuh1j`hhhj0hNhNubj)}(hX**Parameters** ``u64 *idx`` pointer to u64 loop variable ``int nid`` node selector, ``NUMA_NO_NODE`` for all nodes ``enum memblock_flags flags`` pick from blocks based on memory attributes ``struct memblock_type *type_a`` pointer to memblock_type from where the range is taken ``struct memblock_type *type_b`` pointer to memblock_type which excludes memory from being taken ``phys_addr_t *out_start`` ptr to phys_addr_t for start address of the range, can be ``NULL`` ``phys_addr_t *out_end`` ptr to phys_addr_t for end address of the range, can be ``NULL`` ``int *out_nid`` ptr to int for nid of the range, can be ``NULL`` **Description** Finds the next range from type_a which is not marked as unsuitable in type_b. Reverse of __next_mem_range().h](h)}(h**Parameters**h]j)}(hjvh]h Parameters}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chM hjvubj)}(hhh](j)}(h*``u64 *idx`` pointer to u64 loop variable h](j)}(h ``u64 *idx``h]h)}(hjvh]hu64 *idx}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjvubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chM hjvubj3)}(hhh]h)}(hpointer to u64 loop variableh]hpointer to u64 loop variable}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjvhM hjvubah}(h]h ]h"]h$]h&]uh1j2hjvubeh}(h]h ]h"]h$]h&]uh1jhjvhM hjvubj)}(h:``int nid`` node selector, ``NUMA_NO_NODE`` for all nodes h](j)}(h ``int nid``h]h)}(hj wh]hint nid}(hj whhhNhNubah}(h]h ]h"]h$]h&]uh1hhj wubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chM hjwubj3)}(hhh]h)}(h-node selector, ``NUMA_NO_NODE`` for all nodesh](hnode selector, }(hj$whhhNhNubh)}(h``NUMA_NO_NODE``h]h NUMA_NO_NODE}(hj,whhhNhNubah}(h]h ]h"]h$]h&]uh1hhj$wubh for all nodes}(hj$whhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj whM hj!wubah}(h]h ]h"]h$]h&]uh1j2hjwubeh}(h]h ]h"]h$]h&]uh1jhj whM hjvubj)}(hJ``enum memblock_flags flags`` pick from blocks based on memory attributes h](j)}(h``enum memblock_flags flags``h]h)}(hjVwh]henum memblock_flags flags}(hjXwhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjTwubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chM hjPwubj3)}(hhh]h)}(h+pick from blocks based on memory attributesh]h+pick from blocks based on memory attributes}(hjowhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjkwhM hjlwubah}(h]h ]h"]h$]h&]uh1j2hjPwubeh}(h]h ]h"]h$]h&]uh1jhjkwhM hjvubj)}(hX``struct memblock_type *type_a`` pointer to memblock_type from where the range is taken h](j)}(h ``struct memblock_type *type_a``h]h)}(hjwh]hstruct memblock_type *type_a}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjwubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjwubj3)}(hhh]h)}(h6pointer to memblock_type from where the range is takenh]h6pointer to memblock_type from where the range is taken}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjwhMhjwubah}(h]h ]h"]h$]h&]uh1j2hjwubeh}(h]h ]h"]h$]h&]uh1jhjwhMhjvubj)}(ha``struct memblock_type *type_b`` pointer to memblock_type which excludes memory from being taken h](j)}(h ``struct memblock_type *type_b``h]h)}(hjwh]hstruct memblock_type *type_b}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjwubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjwubj3)}(hhh]h)}(h?pointer to memblock_type which excludes memory from being takenh]h?pointer to memblock_type which excludes memory from being taken}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjwhMhjwubah}(h]h ]h"]h$]h&]uh1j2hjwubeh}(h]h ]h"]h$]h&]uh1jhjwhMhjvubj)}(h^``phys_addr_t *out_start`` ptr to phys_addr_t for start address of the range, can be ``NULL`` h](j)}(h``phys_addr_t *out_start``h]h)}(hjxh]hphys_addr_t *out_start}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjwubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjwubj3)}(hhh]h)}(hBptr to phys_addr_t for start address of the range, can be ``NULL``h](h:ptr to phys_addr_t for start address of the range, can be }(hjxhhhNhNubh)}(h``NULL``h]hNULL}(hj"xhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjxubeh}(h]h ]h"]h$]h&]uh1hhjxhMhjxubah}(h]h ]h"]h$]h&]uh1j2hjwubeh}(h]h ]h"]h$]h&]uh1jhjxhMhjvubj)}(hZ``phys_addr_t *out_end`` ptr to phys_addr_t for end address of the range, can be ``NULL`` h](j)}(h``phys_addr_t *out_end``h]h)}(hjHxh]hphys_addr_t *out_end}(hjJxhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjFxubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjBxubj3)}(hhh]h)}(h@ptr to phys_addr_t for end address of the range, can be ``NULL``h](h8ptr to phys_addr_t for end address of the range, can be }(hjaxhhhNhNubh)}(h``NULL``h]hNULL}(hjixhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjaxubeh}(h]h ]h"]h$]h&]uh1hhj]xhMhj^xubah}(h]h ]h"]h$]h&]uh1j2hjBxubeh}(h]h ]h"]h$]h&]uh1jhj]xhMhjvubj)}(hB``int *out_nid`` ptr to int for nid of the range, can be ``NULL`` h](j)}(h``int *out_nid``h]h)}(hjxh]h int *out_nid}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjxubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjxubj3)}(hhh]h)}(h0ptr to int for nid of the range, can be ``NULL``h](h(ptr to int for nid of the range, can be }(hjxhhhNhNubh)}(h``NULL``h]hNULL}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjxubeh}(h]h ]h"]h$]h&]uh1hhjxhMhjxubah}(h]h ]h"]h$]h&]uh1j2hjxubeh}(h]h ]h"]h$]h&]uh1jhjxhMhjvubeh}(h]h ]h"]h$]h&]uh1j hjvubh)}(h**Description**h]j)}(hjxh]h Description}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjvubh)}(hMFinds the next range from type_a which is not marked as unsuitable in type_b.h]hMFinds the next range from type_a which is not marked as unsuitable in type_b.}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjvubh)}(hReverse of __next_mem_range().h]hReverse of __next_mem_range().}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjvubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj0hhhNhNubjP)}(hhh]h}(h]h ]h"]h$]h&]entries](j\memblock_set_node (C function)c.memblock_set_nodehNtauh1jOhj0hhhNhNubja)}(hhh](jf)}(hoint __init_memblock memblock_set_node (phys_addr_t base, phys_addr_t size, struct memblock_type *type, int nid)h]jl)}(hnint __init_memblock memblock_set_node(phys_addr_t base, phys_addr_t size, struct memblock_type *type, int nid)h](j)}(hinth]hint}(hj,yhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(yhhhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMubj)}(h h]h }(hj;yhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(yhhhj:yhMubh__init_memblock}(hj(yhhhNhNubj)}(h h]h }(hjMyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(yhhhj:yhMubj)}(hmemblock_set_nodeh]j)}(hmemblock_set_nodeh]hmemblock_set_node}(hj_yhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[yubah}(h]h ](jjeh"]h$]h&]jjuh1jhj(yhhhj:yhMubj)}(hI(phys_addr_t base, phys_addr_t size, struct memblock_type *type, int nid)h](j)}(hphys_addr_t baseh](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hj~yhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{yubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetjymodnameN classnameNj j )}j! ]j$ )}j jaysbc.memblock_set_nodeasbuh1hhjwyubj)}(h h]h }(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwyubj)}(hbaseh]hbase}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwyubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjsyubj)}(hphys_addr_t sizeh](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetjymodnameN classnameNj j )}j! ]jyc.memblock_set_nodeasbuh1hhjyubj)}(h h]h }(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubj)}(hsizeh]hsize}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjsyubj)}(hstruct memblock_type *typeh](jr)}(hjh]hstruct}(hj zhhhNhNubah}(h]h ]j~ah"]h$]h&]uh1jqhj zubj)}(h h]h }(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj zubh)}(hhh]j)}(h memblock_typeh]h memblock_type}(hj+zhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(zubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetj-zmodnameN classnameNj j )}j! ]jyc.memblock_set_nodeasbuh1hhj zubj)}(h h]h }(hjIzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj zubj!)}(hj$h]h*}(hjWzhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1j!hj zubj)}(htypeh]htype}(hjdzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj zubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjsyubj)}(hint nidh](j)}(hinth]hint}(hj}zhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyzubj)}(h h]h }(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyzubj)}(hnidh]hnid}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyzubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjsyubeh}(h]h ]h"]h$]h&]jjuh1jhj(yhhhj:yhMubeh}(h]h ]h"]h$]h&]jjjuh1jkjjhj$yhhhj:yhMubah}(h]jyah ](jjeh"]h$]h&]jj)jhuh1jehj:yhMhj!yhhubj)}(hhh]h)}(hset node ID on memblock regionsh]hset node ID on memblock regions}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjzhhubah}(h]h ]h"]h$]h&]uh1jhj!yhhhj:yhMubeh}(h]h ](hfunctioneh"]h$]h&]jhjjzjjzjjjuh1j`hhhj0hNhNubj)}(hX**Parameters** ``phys_addr_t base`` base of area to set node ID for ``phys_addr_t size`` size of area to set node ID for ``struct memblock_type *type`` memblock type to set node ID for ``int nid`` node ID to set **Description** Set the nid of memblock **type** regions in [**base**, **base** + **size**) to **nid**. Regions which cross the area boundaries are split as necessary. **Return** 0 on success, -errno on failure.h](h)}(h**Parameters**h]j)}(hjzh]h Parameters}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjzubj)}(hhh](j)}(h5``phys_addr_t base`` base of area to set node ID for h](j)}(h``phys_addr_t base``h]h)}(hj{h]hphys_addr_t base}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj{ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjzubj3)}(hhh]h)}(hbase of area to set node ID forh]hbase of area to set node ID for}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj{hMhj{ubah}(h]h ]h"]h$]h&]uh1j2hjzubeh}(h]h ]h"]h$]h&]uh1jhj{hMhjzubj)}(h5``phys_addr_t size`` size of area to set node ID for h](j)}(h``phys_addr_t size``h]h)}(hj={h]hphys_addr_t size}(hj?{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj;{ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhj7{ubj3)}(hhh]h)}(hsize of area to set node ID forh]hsize of area to set node ID for}(hjV{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjR{hMhjS{ubah}(h]h ]h"]h$]h&]uh1j2hj7{ubeh}(h]h ]h"]h$]h&]uh1jhjR{hMhjzubj)}(h@``struct memblock_type *type`` memblock type to set node ID for h](j)}(h``struct memblock_type *type``h]h)}(hjv{h]hstruct memblock_type *type}(hjx{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjt{ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjp{ubj3)}(hhh]h)}(h memblock type to set node ID forh]h memblock type to set node ID for}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj{hMhj{ubah}(h]h ]h"]h$]h&]uh1j2hjp{ubeh}(h]h ]h"]h$]h&]uh1jhj{hMhjzubj)}(h``int nid`` node ID to set h](j)}(h ``int nid``h]h)}(hj{h]hint nid}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj{ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhj{ubj3)}(hhh]h)}(hnode ID to seth]hnode ID to set}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj{hMhj{ubah}(h]h ]h"]h$]h&]uh1j2hj{ubeh}(h]h ]h"]h$]h&]uh1jhj{hMhjzubeh}(h]h ]h"]h$]h&]uh1j hjzubh)}(h**Description**h]j)}(hj{h]h Description}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjzubh)}(hSet the nid of memblock **type** regions in [**base**, **base** + **size**) to **nid**. Regions which cross the area boundaries are split as necessary.h](hSet the nid of memblock }(hj|hhhNhNubj)}(h**type**h]htype}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|ubh regions in [}(hj|hhhNhNubj)}(h**base**h]hbase}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|ubh, }(hj|hhhNhNubj)}(h**base**h]hbase}(hj,|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|ubh + }(hj|hhhNhNubj)}(h**size**h]hsize}(hj>|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|ubh) to }(hj|hhhNhNubj)}(h**nid**h]hnid}(hjP|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|ubhA. Regions which cross the area boundaries are split as necessary.}(hj|hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjzubh)}(h **Return**h]j)}(hjk|h]hReturn}(hjm|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhji|ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjzubh)}(h 0 on success, -errno on failure.h]h 0 on success, -errno on failure.}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjzubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj0hhhNhNubjP)}(hhh]h}(h]h ]h"]h$]h&]entries](j\)__next_mem_pfn_range_in_zone (C function)c.__next_mem_pfn_range_in_zonehNtauh1jOhj0hhhNhNubja)}(hhh](jf)}(hvoid __init_memblock __next_mem_pfn_range_in_zone (u64 *idx, struct zone *zone, unsigned long *out_spfn, unsigned long *out_epfn)h]jl)}(hvoid __init_memblock __next_mem_pfn_range_in_zone(u64 *idx, struct zone *zone, unsigned long *out_spfn, unsigned long *out_epfn)h](j)}(hvoidh]hvoid}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|hhhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMubj)}(h h]h }(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|hhhj|hMubh__init_memblock}(hj|hhhNhNubj)}(h h]h }(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|hhhj|hMubj)}(h__next_mem_pfn_range_in_zoneh]j)}(h__next_mem_pfn_range_in_zoneh]h__next_mem_pfn_range_in_zone}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj|hhhj|hMubj)}(hO(u64 *idx, struct zone *zone, unsigned long *out_spfn, unsigned long *out_epfn)h](j)}(hu64 *idxh](h)}(hhh]j)}(hu64h]hu64}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetj}modnameN classnameNj j )}j! ]j$ )}j j|sbc.__next_mem_pfn_range_in_zoneasbuh1hhj|ubj)}(h h]h }(hj"}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubj!)}(hj$h]h*}(hj0}hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1j!hj|ubj)}(hidxh]hidx}(hj=}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj|ubj)}(hstruct zone *zoneh](jr)}(hjh]hstruct}(hjV}hhhNhNubah}(h]h ]j~ah"]h$]h&]uh1jqhjR}ubj)}(h h]h }(hjc}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjR}ubh)}(hhh]j)}(hzoneh]hzone}(hjt}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjq}ubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetjv}modnameN classnameNj j )}j! ]j}c.__next_mem_pfn_range_in_zoneasbuh1hhjR}ubj)}(h h]h }(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjR}ubj!)}(hj$h]h*}(hj}hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1j!hjR}ubj)}(hzoneh]hzone}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjR}ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj|ubj)}(hunsigned long *out_spfnh](j)}(hunsignedh]hunsigned}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubj)}(h h]h }(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubj)}(hlongh]hlong}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubj)}(h h]h }(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubj!)}(hj$h]h*}(hj}hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1j!hj}ubj)}(hout_spfnh]hout_spfn}(hj ~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj|ubj)}(hunsigned long *out_epfnh](j)}(hunsignedh]hunsigned}(hj$~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ~ubj)}(h h]h }(hj2~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ~ubj)}(hlongh]hlong}(hj@~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ~ubj)}(h h]h }(hjN~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ~ubj!)}(hj$h]h*}(hj\~hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1j!hj ~ubj)}(hout_epfnh]hout_epfn}(hji~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ~ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj|ubeh}(h]h ]h"]h$]h&]jjuh1jhj|hhhj|hMubeh}(h]h ]h"]h$]h&]jjjuh1jkjjhj|hhhj|hMubah}(h]j|ah ](jjeh"]h$]h&]jj)jhuh1jehj|hMhj|hhubj)}(hhh]h)}(h'iterator for for_each_*_range_in_zone()h]h'iterator for for_each_*_range_in_zone()}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhj~hhubah}(h]h ]h"]h$]h&]uh1jhj|hhhj|hMubeh}(h]h ](hfunctioneh"]h$]h&]jhjj~jj~jjjuh1j`hhhj0hNhNubj)}(hX**Parameters** ``u64 *idx`` pointer to u64 loop variable ``struct zone *zone`` zone in which all of the memory blocks reside ``unsigned long *out_spfn`` ptr to ulong for start pfn of the range, can be ``NULL`` ``unsigned long *out_epfn`` ptr to ulong for end pfn of the range, can be ``NULL`` **Description** This function is meant to be a zone/pfn specific wrapper for the for_each_mem_range type iterators. Specifically they are used in the deferred memory init routines and as such we were duplicating much of this logic throughout the code. So instead of having it in multiple locations it seemed like it would make more sense to centralize this to one new iterator that does everything they need.h](h)}(h**Parameters**h]j)}(hj~h]h Parameters}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhj~ubj)}(hhh](j)}(h*``u64 *idx`` pointer to u64 loop variable h](j)}(h ``u64 *idx``h]h)}(hj~h]hu64 *idx}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj~ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhj~ubj3)}(hhh]h)}(hpointer to u64 loop variableh]hpointer to u64 loop variable}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj~hMhj~ubah}(h]h ]h"]h$]h&]uh1j2hj~ubeh}(h]h ]h"]h$]h&]uh1jhj~hMhj~ubj)}(hD``struct zone *zone`` zone in which all of the memory blocks reside h](j)}(h``struct zone *zone``h]h)}(hj h]hstruct zone *zone}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjubj3)}(hhh]h)}(h-zone in which all of the memory blocks resideh]h-zone in which all of the memory blocks reside}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj"hMhj#ubah}(h]h ]h"]h$]h&]uh1j2hjubeh}(h]h ]h"]h$]h&]uh1jhj"hMhj~ubj)}(hU``unsigned long *out_spfn`` ptr to ulong for start pfn of the range, can be ``NULL`` h](j)}(h``unsigned long *out_spfn``h]h)}(hjFh]hunsigned long *out_spfn}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjDubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhj@ubj3)}(hhh]h)}(h8ptr to ulong for start pfn of the range, can be ``NULL``h](hH0ptr to ulong for start pfn of the range, can be }(hj_hhhNhNubh)}(h``NULL``h]hNULL}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1hhj_ubeh}(h]h ]h"]h$]h&]uh1hhj[hMhj\ubah}(h]h ]h"]h$]h&]uh1j2hj@ubeh}(h]h ]h"]h$]h&]uh1jhj[hMhj~ubj)}(hS``unsigned long *out_epfn`` ptr to ulong for end pfn of the range, can be ``NULL`` h](j)}(h``unsigned long *out_epfn``h]h)}(hjh]hunsigned long *out_epfn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjubj3)}(hhh]h)}(h6ptr to ulong for end pfn of the range, can be ``NULL``h](h.ptr to ulong for end pfn of the range, can be }(hjhhhNhNubh)}(h``NULL``h]hNULL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j2hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj~ubeh}(h]h ]h"]h$]h&]uh1j hj~ubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhj~ubh)}(hXThis function is meant to be a zone/pfn specific wrapper for the for_each_mem_range type iterators. Specifically they are used in the deferred memory init routines and as such we were duplicating much of this logic throughout the code. So instead of having it in multiple locations it seemed like it would make more sense to centralize this to one new iterator that does everything they need.h]hXThis function is meant to be a zone/pfn specific wrapper for the for_each_mem_range type iterators. Specifically they are used in the deferred memory init routines and as such we were duplicating much of this logic throughout the code. So instead of having it in multiple locations it seemed like it would make more sense to centralize this to one new iterator that does everything they need.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhj~ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj0hhhNhNubjP)}(hhh]h}(h]h ]h"]h$]h&]entries](j\%memblock_alloc_range_nid (C function)c.memblock_alloc_range_nidhNtauh1jOhj0hhhNhNubja)}(hhh](jf)}(hphys_addr_t memblock_alloc_range_nid (phys_addr_t size, phys_addr_t align, phys_addr_t start, phys_addr_t end, int nid, bool exact_nid)h]jl)}(hphys_addr_t memblock_alloc_range_nid(phys_addr_t size, phys_addr_t align, phys_addr_t start, phys_addr_t end, int nid, bool exact_nid)h](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetj modnameN classnameNj j )}j! ]j$ )}j memblock_alloc_range_nidsbc.memblock_alloc_range_nidasbuh1hhjhhhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMubj)}(h h]h }(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj?hMubj)}(hmemblock_alloc_range_nidh]j)}(hj<h]hmemblock_alloc_range_nid}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj?hMubj)}(hb(phys_addr_t size, phys_addr_t align, phys_addr_t start, phys_addr_t end, int nid, bool exact_nid)h](j)}(hphys_addr_t sizeh](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetjrmodnameN classnameNj j )}j! ]j:c.memblock_alloc_range_nidasbuh1hhjiubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubj)}(hsizeh]hsize}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjeubj)}(hphys_addr_t alignh](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetjmodnameN classnameNj j )}j! ]j:c.memblock_alloc_range_nidasbuh1hhjubj)}(h h]h }(hjրhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(halignh]halign}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjeubj)}(hphys_addr_t starth](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetjmodnameN classnameNj j )}j! ]j:c.memblock_alloc_range_nidasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hstarth]hstart}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjeubj)}(hphys_addr_t endh](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetjJmodnameN classnameNj j )}j! ]j:c.memblock_alloc_range_nidasbuh1hhjAubj)}(h h]h }(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubj)}(hendh]hend}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjeubj)}(hint nidh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hnidh]hnid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjeubj)}(hbool exact_nidh](j)}(hjOh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjρhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h exact_nidh]h exact_nid}(hj݁hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjeubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhj?hMubeh}(h]h ]h"]h$]h&]jjjuh1jkjjhjhhhj?hMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jehj?hMhjhhubj)}(hhh]h)}(hallocate boot memory blockh]hallocate boot memory block}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj?hMubeh}(h]h ](hfunctioneh"]h$]h&]jhjjjjjjjuh1j`hhhj0hNhNubj)}(hXO**Parameters** ``phys_addr_t size`` size of memory block to be allocated in bytes ``phys_addr_t align`` alignment of the region and block's size ``phys_addr_t start`` the lower bound of the memory region to allocate (phys address) ``phys_addr_t end`` the upper bound of the memory region to allocate (phys address) ``int nid`` nid of the free area to find, ``NUMA_NO_NODE`` for any node ``bool exact_nid`` control the allocation fall back to other nodes **Description** The allocation is performed from memory region limited by memblock.current_limit if **end** == ``MEMBLOCK_ALLOC_ACCESSIBLE``. If the specified node can not hold the requested memory and **exact_nid** is false, the allocation falls back to any node in the system. For systems with memory mirroring, the allocation is attempted first from the regions with mirroring enabled and then retried from any memory region. In addition, function using kmemleak_alloc_phys for allocated boot memory block, it is never reported as leaks. **Return** Physical address of allocated memory block on success, ``0`` on failure.h](h)}(h**Parameters**h]j)}(hj)h]h Parameters}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhj#ubj)}(hhh](j)}(hC``phys_addr_t size`` size of memory block to be allocated in bytes h](j)}(h``phys_addr_t size``h]h)}(hjHh]hphys_addr_t size}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjFubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjBubj3)}(hhh]h)}(h-size of memory block to be allocated in bytesh]h-size of memory block to be allocated in bytes}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1hhj]hMhj^ubah}(h]h ]h"]h$]h&]uh1j2hjBubeh}(h]h ]h"]h$]h&]uh1jhj]hMhj?ubj)}(h?``phys_addr_t align`` alignment of the region and block's size h](j)}(h``phys_addr_t align``h]h)}(hjh]hphys_addr_t align}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhj{ubj3)}(hhh]h)}(h(alignment of the region and block's sizeh]h*alignment of the region and block’s size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j2hj{ubeh}(h]h ]h"]h$]h&]uh1jhjhMhj?ubj)}(hV``phys_addr_t start`` the lower bound of the memory region to allocate (phys address) h](j)}(h``phys_addr_t start``h]h)}(hjh]hphys_addr_t start}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjubj3)}(hhh]h)}(h?the lower bound of the memory region to allocate (phys address)h]h?the lower bound of the memory region to allocate (phys address)}(hjӂhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjςhMhjЂubah}(h]h ]h"]h$]h&]uh1j2hjubeh}(h]h ]h"]h$]h&]uh1jhjςhMhj?ubj)}(hT``phys_addr_t end`` the upper bound of the memory region to allocate (phys address) h](j)}(h``phys_addr_t end``h]h)}(hjh]hphys_addr_t end}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjubj3)}(hhh]h)}(h?the upper bound of the memory region to allocate (phys address)h]h?the upper bound of the memory region to allocate (phys address)}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhj ubah}(h]h ]h"]h$]h&]uh1j2hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj?ubj)}(hH``int nid`` nid of the free area to find, ``NUMA_NO_NODE`` for any node h](j)}(h ``int nid``h]h)}(hj,h]hint nid}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj*ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhj&ubj3)}(hhh]h)}(h;nid of the free area to find, ``NUMA_NO_NODE`` for any nodeh](hnid of the free area to find, }(hjEhhhNhNubh)}(h``NUMA_NO_NODE``h]h NUMA_NO_NODE}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjEubh for any node}(hjEhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjAhMhjBubah}(h]h ]h"]h$]h&]uh1j2hj&ubeh}(h]h ]h"]h$]h&]uh1jhjAhMhj?ubj)}(hC``bool exact_nid`` control the allocation fall back to other nodes h](j)}(h``bool exact_nid``h]h)}(hjwh]hbool exact_nid}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjuubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjqubj3)}(hhh]h)}(h/control the allocation fall back to other nodesh]h/control the allocation fall back to other nodes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j2hjqubeh}(h]h ]h"]h$]h&]uh1jhjhMhj?ubeh}(h]h ]h"]h$]h&]uh1j hj#ubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhj#ubh)}(h}The allocation is performed from memory region limited by memblock.current_limit if **end** == ``MEMBLOCK_ALLOC_ACCESSIBLE``.h](hTThe allocation is performed from memory region limited by memblock.current_limit if }(hjȃhhhNhNubj)}(h**end**h]hend}(hjЃhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjȃubh == }(hjȃhhhNhNubh)}(h``MEMBLOCK_ALLOC_ACCESSIBLE``h]hMEMBLOCK_ALLOC_ACCESSIBLE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjȃubh.}(hjȃhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhj#ubh)}(hIf the specified node can not hold the requested memory and **exact_nid** is false, the allocation falls back to any node in the system.h](hhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhj#ubh)}(hHPhysical address of allocated memory block on success, ``0`` on failure.h](h7Physical address of allocated memory block on success, }(hjRhhhNhNubh)}(h``0``h]h0}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjRubh on failure.}(hjRhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhj#ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj0hhhNhNubjP)}(hhh]h}(h]h ]h"]h$]h&]entries](j\&memblock_phys_alloc_range (C function)c.memblock_phys_alloc_rangehNtauh1jOhj0hhhNhNubja)}(hhh](jf)}(hophys_addr_t memblock_phys_alloc_range (phys_addr_t size, phys_addr_t align, phys_addr_t start, phys_addr_t end)h]jl)}(hnphys_addr_t memblock_phys_alloc_range(phys_addr_t size, phys_addr_t align, phys_addr_t start, phys_addr_t end)h](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetjmodnameN classnameNj j )}j! ]j$ )}j memblock_phys_alloc_rangesbc.memblock_phys_alloc_rangeasbuh1hhjhhhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMLubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMLubj)}(hmemblock_phys_alloc_rangeh]j)}(hjh]hmemblock_phys_alloc_range}(hjʄhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjƄubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMLubj)}(hI(phys_addr_t size, phys_addr_t align, phys_addr_t start, phys_addr_t end)h](j)}(hphys_addr_t sizeh](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetjmodnameN classnameNj j )}j! ]jc.memblock_phys_alloc_rangeasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hsizeh]hsize}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj݄ubj)}(hphys_addr_t alignh](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetj2modnameN classnameNj j )}j! ]jc.memblock_phys_alloc_rangeasbuh1hhj)ubj)}(h h]h }(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubj)}(halignh]halign}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj݄ubj)}(hphys_addr_t starth](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetjzmodnameN classnameNj j )}j! ]jc.memblock_phys_alloc_rangeasbuh1hhjqubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubj)}(hstarth]hstart}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj݄ubj)}(hphys_addr_t endh](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetj…modnameN classnameNj j )}j! ]jc.memblock_phys_alloc_rangeasbuh1hhjubj)}(h h]h }(hjޅhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hendh]hend}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj݄ubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMLubeh}(h]h ]h"]h$]h&]jjjuh1jkjjhjhhhjhMLubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jehjhMLhjhhubj)}(hhh]h)}(h.allocate a memory block inside specified rangeh]h.allocate a memory block inside specified range}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMLhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMLubeh}(h]h ](hfunctioneh"]h$]h&]jhjj.jj.jjjuh1j`hhhj0hNhNubj)}(hX**Parameters** ``phys_addr_t size`` size of memory block to be allocated in bytes ``phys_addr_t align`` alignment of the region and block's size ``phys_addr_t start`` the lower bound of the memory region to allocate (physical address) ``phys_addr_t end`` the upper bound of the memory region to allocate (physical address) **Description** Allocate **size** bytes in the between **start** and **end**. **Return** physical address of the allocated memory block on success, ``0`` on failure.h](h)}(h**Parameters**h]j)}(hj8h]h Parameters}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMPhj2ubj)}(hhh](j)}(hC``phys_addr_t size`` size of memory block to be allocated in bytes h](j)}(h``phys_addr_t size``h]h)}(hjWh]hphys_addr_t size}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjUubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMMhjQubj3)}(hhh]h)}(h-size of memory block to be allocated in bytesh]h-size of memory block to be allocated in bytes}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hhjlhMMhjmubah}(h]h ]h"]h$]h&]uh1j2hjQubeh}(h]h ]h"]h$]h&]uh1jhjlhMMhjNubj)}(h?``phys_addr_t align`` alignment of the region and block's size h](j)}(h``phys_addr_t align``h]h)}(hjh]hphys_addr_t align}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMNhjubj3)}(hhh]h)}(h(alignment of the region and block's sizeh]h*alignment of the region and block’s size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMNhjubah}(h]h ]h"]h$]h&]uh1j2hjubeh}(h]h ]h"]h$]h&]uh1jhjhMNhjNubj)}(hZ``phys_addr_t start`` the lower bound of the memory region to allocate (physical address) h](j)}(h``phys_addr_t start``h]h)}(hjɆh]hphys_addr_t start}(hjˆhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjdžubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMOhjÆubj3)}(hhh]h)}(hCthe lower bound of the memory region to allocate (physical address)h]hCthe lower bound of the memory region to allocate (physical address)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjކhMOhj߆ubah}(h]h ]h"]h$]h&]uh1j2hjÆubeh}(h]h ]h"]h$]h&]uh1jhjކhMOhjNubj)}(hX``phys_addr_t end`` the upper bound of the memory region to allocate (physical address) h](j)}(h``phys_addr_t end``h]h)}(hjh]hphys_addr_t end}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMPhjubj3)}(hhh]h)}(hCthe upper bound of the memory region to allocate (physical address)h]hCthe upper bound of the memory region to allocate (physical address)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMPhjubah}(h]h ]h"]h$]h&]uh1j2hjubeh}(h]h ]h"]h$]h&]uh1jhjhMPhjNubeh}(h]h ]h"]h$]h&]uh1j hj2ubh)}(h**Description**h]j)}(hj=h]h Description}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMRhj2ubh)}(h=Allocate **size** bytes in the between **start** and **end**.h](h Allocate }(hjShhhNhNubj)}(h**size**h]hsize}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubh bytes in the between }(hjShhhNhNubj)}(h **start**h]hstart}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubh and }(hjShhhNhNubj)}(h**end**h]hend}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubh.}(hjShhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMQhj2ubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMShj2ubh)}(hLphysical address of the allocated memory block on success, ``0`` on failure.h](h;physical address of the allocated memory block on success, }(hjhhhNhNubh)}(h``0``h]h0}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh on failure.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMThj2ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj0hhhNhNubjP)}(hhh]h}(h]h ]h"]h$]h&]entries](j\(memblock_phys_alloc_try_nid (C function)c.memblock_phys_alloc_try_nidhNtauh1jOhj0hhhNhNubja)}(hhh](jf)}(hVphys_addr_t memblock_phys_alloc_try_nid (phys_addr_t size, phys_addr_t align, int nid)h]jl)}(hUphys_addr_t memblock_phys_alloc_try_nid(phys_addr_t size, phys_addr_t align, int nid)h](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetjmodnameN classnameNj j )}j! ]j$ )}j memblock_phys_alloc_try_nidsbc.memblock_phys_alloc_try_nidasbuh1hhjhhhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMdubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMdubj)}(hmemblock_phys_alloc_try_nidh]j)}(hjh]hmemblock_phys_alloc_try_nid}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMdubj)}(h.(phys_addr_t size, phys_addr_t align, int nid)h](j)}(hphys_addr_t sizeh](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetjHmodnameN classnameNj j )}j! ]jc.memblock_phys_alloc_try_nidasbuh1hhj?ubj)}(h h]h }(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubj)}(hsizeh]hsize}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj;ubj)}(hphys_addr_t alignh](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetjmodnameN classnameNj j )}j! ]jc.memblock_phys_alloc_try_nidasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(halignh]halign}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj;ubj)}(hint nidh](j)}(hinth]hint}(hjӈhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjψubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjψubj)}(hnidh]hnid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjψubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj;ubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMdubeh}(h]h ]h"]h$]h&]jjjuh1jkjjhjhhhjhMdubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jehjhMdhjhhubj)}(hhh]h)}(h0allocate a memory block from specified NUMA nodeh]h0allocate a memory block from specified NUMA node}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMdhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMdubeh}(h]h ](hfunctioneh"]h$]h&]jhjj1jj1jjjuh1j`hhhj0hNhNubj)}(hX**Parameters** ``phys_addr_t size`` size of memory block to be allocated in bytes ``phys_addr_t align`` alignment of the region and block's size ``int nid`` nid of the free area to find, ``NUMA_NO_NODE`` for any node **Description** Allocates memory block from the specified NUMA node. If the node has no available memory, attempts to allocated from any node in the system. **Return** physical address of the allocated memory block on success, ``0`` on failure.h](h)}(h**Parameters**h]j)}(hj;h]h Parameters}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhhj5ubj)}(hhh](j)}(hC``phys_addr_t size`` size of memory block to be allocated in bytes h](j)}(h``phys_addr_t size``h]h)}(hjZh]hphys_addr_t size}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjXubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMehjTubj3)}(hhh]h)}(h-size of memory block to be allocated in bytesh]h-size of memory block to be allocated in bytes}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1hhjohMehjpubah}(h]h ]h"]h$]h&]uh1j2hjTubeh}(h]h ]h"]h$]h&]uh1jhjohMehjQubj)}(h?``phys_addr_t align`` alignment of the region and block's size h](j)}(h``phys_addr_t align``h]h)}(hjh]hphys_addr_t align}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMfhjubj3)}(hhh]h)}(h(alignment of the region and block's sizeh]h*alignment of the region and block’s size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMfhjubah}(h]h ]h"]h$]h&]uh1j2hjubeh}(h]h ]h"]h$]h&]uh1jhjhMfhjQubj)}(hH``int nid`` nid of the free area to find, ``NUMA_NO_NODE`` for any node h](j)}(h ``int nid``h]h)}(hj̉h]hint nid}(hjΉhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjʉubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMghjƉubj3)}(hhh]h)}(h;nid of the free area to find, ``NUMA_NO_NODE`` for any nodeh](hnid of the free area to find, }(hjhhhNhNubh)}(h``NUMA_NO_NODE``h]h NUMA_NO_NODE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh for any node}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMghjubah}(h]h ]h"]h$]h&]uh1j2hjƉubeh}(h]h ]h"]h$]h&]uh1jhjhMghjQubeh}(h]h ]h"]h$]h&]uh1j hj5ubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMihj5ubh)}(hAllocates memory block from the specified NUMA node. If the node has no available memory, attempts to allocated from any node in the system.h]hAllocates memory block from the specified NUMA node. If the node has no available memory, attempts to allocated from any node in the system.}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhhj5ubh)}(h **Return**h]j)}(hj@h]hReturn}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMlhj5ubh)}(hLphysical address of the allocated memory block on success, ``0`` on failure.h](h;physical address of the allocated memory block on success, }(hjVhhhNhNubh)}(h``0``h]h0}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjVubh on failure.}(hjVhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMmhj5ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj0hhhNhNubjP)}(hhh]h}(h]h ]h"]h$]h&]entries](j\$memblock_alloc_internal (C function)c.memblock_alloc_internalhNtauh1jOhj0hhhNhNubja)}(hhh](jf)}(hvoid * memblock_alloc_internal (phys_addr_t size, phys_addr_t align, phys_addr_t min_addr, phys_addr_t max_addr, int nid, bool exact_nid)h]jl)}(hvoid *memblock_alloc_internal(phys_addr_t size, phys_addr_t align, phys_addr_t min_addr, phys_addr_t max_addr, int nid, bool exact_nid)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMwubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMwubj!)}(hj$h]h*}(hjhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1j!hjhhhjhMwubj)}(hmemblock_alloc_internalh]j)}(hmemblock_alloc_internalh]hmemblock_alloc_internal}(hjŊhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMwubj)}(hj(phys_addr_t size, phys_addr_t align, phys_addr_t min_addr, phys_addr_t max_addr, int nid, bool exact_nid)h](j)}(hphys_addr_t sizeh](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetjmodnameN classnameNj j )}j! ]j$ )}j jNJsbc.memblock_alloc_internalasbuh1hhj݊ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj݊ubj)}(hsizeh]hsize}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj݊ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjيubj)}(hphys_addr_t alignh](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetj0modnameN classnameNj j )}j! ]jc.memblock_alloc_internalasbuh1hhj'ubj)}(h h]h }(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubj)}(halignh]halign}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjيubj)}(hphys_addr_t min_addrh](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetjxmodnameN classnameNj j )}j! ]jc.memblock_alloc_internalasbuh1hhjoubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubj)}(hmin_addrh]hmin_addr}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjيubj)}(hphys_addr_t max_addrh](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetjmodnameN classnameNj j )}j! ]jc.memblock_alloc_internalasbuh1hhjubj)}(h h]h }(hj܋hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hmax_addrh]hmax_addr}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjيubj)}(hint nidh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hnidh]hnid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjيubj)}(hbool exact_nidh](j)}(hjOh]hbool}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubj)}(h h]h }(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubj)}(h exact_nidh]h exact_nid}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjيubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMwubeh}(h]h ]h"]h$]h&]jjjuh1jkjjhjhhhjhMwubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jehjhMwhjhhubj)}(hhh]h)}(hallocate boot memory blockh]hallocate boot memory block}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMwhjzhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMwubeh}(h]h ](hfunctioneh"]h$]h&]jhjjjjjjjuh1j`hhhj0hNhNubj)}(hX**Parameters** ``phys_addr_t size`` size of memory block to be allocated in bytes ``phys_addr_t align`` alignment of the region and block's size ``phys_addr_t min_addr`` the lower bound of the memory region to allocate (phys address) ``phys_addr_t max_addr`` the upper bound of the memory region to allocate (phys address) ``int nid`` nid of the free area to find, ``NUMA_NO_NODE`` for any node ``bool exact_nid`` control the allocation fall back to other nodes **Description** Allocates memory block using memblock_alloc_range_nid() and converts the returned physical address to virtual. The **min_addr** limit is dropped if it can not be satisfied and the allocation will fall back to memory below **min_addr**. Other constraints, such as node and mirrored memory will be handled again in memblock_alloc_range_nid(). **Return** Virtual address of allocated memory block on success, NULL on failure.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chM{hjubj)}(hhh](j)}(hC``phys_addr_t size`` size of memory block to be allocated in bytes h](j)}(h``phys_addr_t size``h]h)}(hjh]hphys_addr_t size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMxhjubj3)}(hhh]h)}(h-size of memory block to be allocated in bytesh]h-size of memory block to be allocated in bytes}(hj׌hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjӌhMxhjԌubah}(h]h ]h"]h$]h&]uh1j2hjubeh}(h]h ]h"]h$]h&]uh1jhjӌhMxhjubj)}(h?``phys_addr_t align`` alignment of the region and block's size h](j)}(h``phys_addr_t align``h]h)}(hjh]hphys_addr_t align}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMyhjubj3)}(hhh]h)}(h(alignment of the region and block's sizeh]h*alignment of the region and block’s size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMyhj ubah}(h]h ]h"]h$]h&]uh1j2hjubeh}(h]h ]h"]h$]h&]uh1jhj hMyhjubj)}(hY``phys_addr_t min_addr`` the lower bound of the memory region to allocate (phys address) h](j)}(h``phys_addr_t min_addr``h]h)}(hj0h]hphys_addr_t min_addr}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj.ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMzhj*ubj3)}(hhh]h)}(h?the lower bound of the memory region to allocate (phys address)h]h?the lower bound of the memory region to allocate (phys address)}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjEhMzhjFubah}(h]h ]h"]h$]h&]uh1j2hj*ubeh}(h]h ]h"]h$]h&]uh1jhjEhMzhjubj)}(hY``phys_addr_t max_addr`` the upper bound of the memory region to allocate (phys address) h](j)}(h``phys_addr_t max_addr``h]h)}(hjih]hphys_addr_t max_addr}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjgubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chM{hjcubj3)}(hhh]h)}(h?the upper bound of the memory region to allocate (phys address)h]h?the upper bound of the memory region to allocate (phys address)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj~hM{hjubah}(h]h ]h"]h$]h&]uh1j2hjcubeh}(h]h ]h"]h$]h&]uh1jhj~hM{hjubj)}(hH``int nid`` nid of the free area to find, ``NUMA_NO_NODE`` for any node h](j)}(h ``int nid``h]h)}(hjh]hint nid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chM|hjubj3)}(hhh]h)}(h;nid of the free area to find, ``NUMA_NO_NODE`` for any nodeh](hnid of the free area to find, }(hjhhhNhNubh)}(h``NUMA_NO_NODE``h]h NUMA_NO_NODE}(hjÍhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh for any node}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhM|hjubah}(h]h ]h"]h$]h&]uh1j2hjubeh}(h]h ]h"]h$]h&]uh1jhjhM|hjubj)}(hC``bool exact_nid`` control the allocation fall back to other nodes h](j)}(h``bool exact_nid``h]h)}(hjh]hbool exact_nid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chM}hjubj3)}(hhh]h)}(h/control the allocation fall back to other nodesh]h/control the allocation fall back to other nodes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM}hjubah}(h]h ]h"]h$]h&]uh1j2hjubeh}(h]h ]h"]h$]h&]uh1jhjhM}hjubeh}(h]h ]h"]h$]h&]uh1j hjubh)}(h**Description**h]j)}(hj(h]h Description}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjubh)}(hnAllocates memory block using memblock_alloc_range_nid() and converts the returned physical address to virtual.h]hnAllocates memory block using memblock_alloc_range_nid() and converts the returned physical address to virtual.}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chM~hjubh)}(hThe **min_addr** limit is dropped if it can not be satisfied and the allocation will fall back to memory below **min_addr**. Other constraints, such as node and mirrored memory will be handled again in memblock_alloc_range_nid().h](hThe }(hjMhhhNhNubj)}(h **min_addr**h]hmin_addr}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMubh_ limit is dropped if it can not be satisfied and the allocation will fall back to memory below }(hjMhhhNhNubj)}(h **min_addr**h]hmin_addr}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMubhj. Other constraints, such as node and mirrored memory will be handled again in memblock_alloc_range_nid().}(hjMhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjubh)}(hFVirtual address of allocated memory block on success, NULL on failure.h]hFVirtual address of allocated memory block on success, NULL on failure.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj0hhhNhNubjP)}(hhh]h}(h]h ]h"]h$]h&]entries](j\)memblock_alloc_exact_nid_raw (C function)c.memblock_alloc_exact_nid_rawhNtauh1jOhj0hhhNhNubja)}(hhh](jf)}(h~void * memblock_alloc_exact_nid_raw (phys_addr_t size, phys_addr_t align, phys_addr_t min_addr, phys_addr_t max_addr, int nid)h]jl)}(h|void *memblock_alloc_exact_nid_raw(phys_addr_t size, phys_addr_t align, phys_addr_t min_addr, phys_addr_t max_addr, int nid)h](j)}(hvoidh]hvoid}(hjǎhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjÎhhhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMubj)}(h h]h }(hj֎hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjÎhhhjՎhMubj!)}(hj$h]h*}(hjhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1j!hjÎhhhjՎhMubj)}(hmemblock_alloc_exact_nid_rawh]j)}(hmemblock_alloc_exact_nid_rawh]hmemblock_alloc_exact_nid_raw}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjÎhhhjՎhMubj)}(hZ(phys_addr_t size, phys_addr_t align, phys_addr_t min_addr, phys_addr_t max_addr, int nid)h](j)}(hphys_addr_t sizeh](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetjmodnameN classnameNj j )}j! ]j$ )}j jsbc.memblock_alloc_exact_nid_rawasbuh1hhj ubj)}(h h]h }(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hsizeh]hsize}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubj)}(hphys_addr_t alignh](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetj`modnameN classnameNj j )}j! ]j0c.memblock_alloc_exact_nid_rawasbuh1hhjWubj)}(h h]h }(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubj)}(halignh]halign}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubj)}(hphys_addr_t min_addrh](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetjmodnameN classnameNj j )}j! ]j0c.memblock_alloc_exact_nid_rawasbuh1hhjubj)}(h h]h }(hjďhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hmin_addrh]hmin_addr}(hjҏhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubj)}(hphys_addr_t max_addrh](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetjmodnameN classnameNj j )}j! ]j0c.memblock_alloc_exact_nid_rawasbuh1hhjubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hmax_addrh]hmax_addr}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubj)}(hint nidh](j)}(hinth]hint}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubj)}(h h]h }(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubj)}(hnidh]hnid}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubeh}(h]h ]h"]h$]h&]jjuh1jhjÎhhhjՎhMubeh}(h]h ]h"]h$]h&]jjjuh1jkjjhjhhhjՎhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jehjՎhMhjhhubj)}(hhh]h)}(hCallocate boot memory block on the exact node without zeroing memoryh]hCallocate boot memory block on the exact node without zeroing memory}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjvhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjՎhMubeh}(h]h ](hfunctioneh"]h$]h&]jhjjjjjjjuh1j`hhhj0hNhNubj)}(hX**Parameters** ``phys_addr_t size`` size of memory block to be allocated in bytes ``phys_addr_t align`` alignment of the region and block's size ``phys_addr_t min_addr`` the lower bound of the memory region from where the allocation is preferred (phys address) ``phys_addr_t max_addr`` the upper bound of the memory region from where the allocation is preferred (phys address), or ``MEMBLOCK_ALLOC_ACCESSIBLE`` to allocate only from memory limited by memblock.current_limit value ``int nid`` nid of the free area to find, ``NUMA_NO_NODE`` for any node **Description** Public function, provides additional debug information (including caller info), if enabled. Does not zero allocated memory. **Return** Virtual address of allocated memory block on success, NULL on failure.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjubj)}(hhh](j)}(hC``phys_addr_t size`` size of memory block to be allocated in bytes h](j)}(h``phys_addr_t size``h]h)}(hjh]hphys_addr_t size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjubj3)}(hhh]h)}(h-size of memory block to be allocated in bytesh]h-size of memory block to be allocated in bytes}(hjӐhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjϐhMhjАubah}(h]h ]h"]h$]h&]uh1j2hjubeh}(h]h ]h"]h$]h&]uh1jhjϐhMhjubj)}(h?``phys_addr_t align`` alignment of the region and block's size h](j)}(h``phys_addr_t align``h]h)}(hjh]hphys_addr_t align}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjubj3)}(hhh]h)}(h(alignment of the region and block's sizeh]h*alignment of the region and block’s size}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhj ubah}(h]h ]h"]h$]h&]uh1j2hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(ht``phys_addr_t min_addr`` the lower bound of the memory region from where the allocation is preferred (phys address) h](j)}(h``phys_addr_t min_addr``h]h)}(hj,h]hphys_addr_t min_addr}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj*ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhj&ubj3)}(hhh]h)}(hZthe lower bound of the memory region from where the allocation is preferred (phys address)h]hZthe lower bound of the memory region from where the allocation is preferred (phys address)}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjBubah}(h]h ]h"]h$]h&]uh1j2hj&ubeh}(h]h ]h"]h$]h&]uh1jhjAhMhjubj)}(h``phys_addr_t max_addr`` the upper bound of the memory region from where the allocation is preferred (phys address), or ``MEMBLOCK_ALLOC_ACCESSIBLE`` to allocate only from memory limited by memblock.current_limit value h](j)}(h``phys_addr_t max_addr``h]h)}(hjfh]hphys_addr_t max_addr}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjdubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhj`ubj3)}(hhh]h)}(hthe upper bound of the memory region from where the allocation is preferred (phys address), or ``MEMBLOCK_ALLOC_ACCESSIBLE`` to allocate only from memory limited by memblock.current_limit valueh](h_the upper bound of the memory region from where the allocation is preferred (phys address), or }(hjhhhNhNubh)}(h``MEMBLOCK_ALLOC_ACCESSIBLE``h]hMEMBLOCK_ALLOC_ACCESSIBLE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubhE to allocate only from memory limited by memblock.current_limit value}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhj|ubah}(h]h ]h"]h$]h&]uh1j2hj`ubeh}(h]h ]h"]h$]h&]uh1jhj{hMhjubj)}(hH``int nid`` nid of the free area to find, ``NUMA_NO_NODE`` for any node h](j)}(h ``int nid``h]h)}(hjh]hint nid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjubj3)}(hhh]h)}(h;nid of the free area to find, ``NUMA_NO_NODE`` for any nodeh](hnid of the free area to find, }(hjˑhhhNhNubh)}(h``NUMA_NO_NODE``h]h NUMA_NO_NODE}(hjӑhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjˑubh for any node}(hjˑhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjǑhMhjȑubah}(h]h ]h"]h$]h&]uh1j2hjubeh}(h]h ]h"]h$]h&]uh1jhjǑhMhjubeh}(h]h ]h"]h$]h&]uh1j hjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjubh)}(h{Public function, provides additional debug information (including caller info), if enabled. Does not zero allocated memory.h]h{Public function, provides additional debug information (including caller info), if enabled. Does not zero allocated memory.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjubh)}(h **Return**h]j)}(hj&h]hReturn}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjubh)}(hFVirtual address of allocated memory block on success, NULL on failure.h]hFVirtual address of allocated memory block on success, NULL on failure.}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj0hhhNhNubjP)}(hhh]h}(h]h ]h"]h$]h&]entries](j\'memblock_alloc_try_nid_raw (C function)c.memblock_alloc_try_nid_rawhNtauh1jOhj0hhhNhNubja)}(hhh](jf)}(h|void * memblock_alloc_try_nid_raw (phys_addr_t size, phys_addr_t align, phys_addr_t min_addr, phys_addr_t max_addr, int nid)h]jl)}(hzvoid *memblock_alloc_try_nid_raw(phys_addr_t size, phys_addr_t align, phys_addr_t min_addr, phys_addr_t max_addr, int nid)h](j)}(hvoidh]hvoid}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjghhhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMubj)}(h h]h }(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjghhhjyhMubj!)}(hj$h]h*}(hjhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1j!hjghhhjyhMubj)}(hmemblock_alloc_try_nid_rawh]j)}(hmemblock_alloc_try_nid_rawh]hmemblock_alloc_try_nid_raw}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjghhhjyhMubj)}(hZ(phys_addr_t size, phys_addr_t align, phys_addr_t min_addr, phys_addr_t max_addr, int nid)h](j)}(hphys_addr_t sizeh](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetjmodnameN classnameNj j )}j! ]j$ )}j jsbc.memblock_alloc_try_nid_rawasbuh1hhjubj)}(h h]h }(hjؒhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hsizeh]hsize}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hphys_addr_t alignh](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetjmodnameN classnameNj j )}j! ]jԒc.memblock_alloc_try_nid_rawasbuh1hhjubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(halignh]halign}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hphys_addr_t min_addrh](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetjLmodnameN classnameNj j )}j! ]jԒc.memblock_alloc_try_nid_rawasbuh1hhjCubj)}(h h]h }(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubj)}(hmin_addrh]hmin_addr}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hphys_addr_t max_addrh](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetjmodnameN classnameNj j )}j! ]jԒc.memblock_alloc_try_nid_rawasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hmax_addrh]hmax_addr}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hint nidh](j)}(hinth]hint}(hjדhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjӓubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjӓubj)}(hnidh]hnid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjӓubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjghhhjyhMubeh}(h]h ]h"]h$]h&]jjjuh1jkjjhjchhhjyhMubah}(h]j^ah ](jjeh"]h$]h&]jj)jhuh1jehjyhMhj`hhubj)}(hhh]h)}(hGallocate boot memory block without zeroing memory and without panickingh]hGallocate boot memory block without zeroing memory and without panicking}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhj`hhhjyhMubeh}(h]h ](hfunctioneh"]h$]h&]jhjj5jj5jjjuh1j`hhhj0hNhNubj)}(hXM**Parameters** ``phys_addr_t size`` size of memory block to be allocated in bytes ``phys_addr_t align`` alignment of the region and block's size ``phys_addr_t min_addr`` the lower bound of the memory region from where the allocation is preferred (phys address) ``phys_addr_t max_addr`` the upper bound of the memory region from where the allocation is preferred (phys address), or ``MEMBLOCK_ALLOC_ACCESSIBLE`` to allocate only from memory limited by memblock.current_limit value ``int nid`` nid of the free area to find, ``NUMA_NO_NODE`` for any node **Description** Public function, provides additional debug information (including caller info), if enabled. Does not zero allocated memory, does not panic if request cannot be satisfied. **Return** Virtual address of allocated memory block on success, NULL on failure.h](h)}(h**Parameters**h]j)}(hj?h]h Parameters}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhj9ubj)}(hhh](j)}(hC``phys_addr_t size`` size of memory block to be allocated in bytes h](j)}(h``phys_addr_t size``h]h)}(hj^h]hphys_addr_t size}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj\ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjXubj3)}(hhh]h)}(h-size of memory block to be allocated in bytesh]h-size of memory block to be allocated in bytes}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjshMhjtubah}(h]h ]h"]h$]h&]uh1j2hjXubeh}(h]h ]h"]h$]h&]uh1jhjshMhjUubj)}(h?``phys_addr_t align`` alignment of the region and block's size h](j)}(h``phys_addr_t align``h]h)}(hjh]hphys_addr_t align}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjubj3)}(hhh]h)}(h(alignment of the region and block's sizeh]h*alignment of the region and block’s size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j2hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjUubj)}(ht``phys_addr_t min_addr`` the lower bound of the memory region from where the allocation is preferred (phys address) h](j)}(h``phys_addr_t min_addr``h]h)}(hjДh]hphys_addr_t min_addr}(hjҔhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjΔubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjʔubj3)}(hhh]h)}(hZthe lower bound of the memory region from where the allocation is preferred (phys address)h]hZthe lower bound of the memory region from where the allocation is preferred (phys address)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjubah}(h]h ]h"]h$]h&]uh1j2hjʔubeh}(h]h ]h"]h$]h&]uh1jhjhMhjUubj)}(h``phys_addr_t max_addr`` the upper bound of the memory region from where the allocation is preferred (phys address), or ``MEMBLOCK_ALLOC_ACCESSIBLE`` to allocate only from memory limited by memblock.current_limit value h](j)}(h``phys_addr_t max_addr``h]h)}(hj h]hphys_addr_t max_addr}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjubj3)}(hhh]h)}(hthe upper bound of the memory region from where the allocation is preferred (phys address), or ``MEMBLOCK_ALLOC_ACCESSIBLE`` to allocate only from memory limited by memblock.current_limit valueh](h_the upper bound of the memory region from where the allocation is preferred (phys address), or }(hj#hhhNhNubh)}(h``MEMBLOCK_ALLOC_ACCESSIBLE``h]hMEMBLOCK_ALLOC_ACCESSIBLE}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj#ubhE to allocate only from memory limited by memblock.current_limit value}(hj#hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhj ubah}(h]h ]h"]h$]h&]uh1j2hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjUubj)}(hH``int nid`` nid of the free area to find, ``NUMA_NO_NODE`` for any node h](j)}(h ``int nid``h]h)}(hjVh]hint nid}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjTubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjPubj3)}(hhh]h)}(h;nid of the free area to find, ``NUMA_NO_NODE`` for any nodeh](hnid of the free area to find, }(hjohhhNhNubh)}(h``NUMA_NO_NODE``h]h NUMA_NO_NODE}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjoubh for any node}(hjohhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjkhMhjlubah}(h]h ]h"]h$]h&]uh1j2hjPubeh}(h]h ]h"]h$]h&]uh1jhjkhMhjUubeh}(h]h ]h"]h$]h&]uh1j hj9ubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhj9ubh)}(hPublic function, provides additional debug information (including caller info), if enabled. Does not zero allocated memory, does not panic if request cannot be satisfied.h]hPublic function, provides additional debug information (including caller info), if enabled. Does not zero allocated memory, does not panic if request cannot be satisfied.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhj9ubh)}(h **Return**h]j)}(hjʕh]hReturn}(hj̕hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjȕubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhj9ubh)}(hFVirtual address of allocated memory block on success, NULL on failure.h]hFVirtual address of allocated memory block on success, NULL on failure.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhj9ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj0hhhNhNubjP)}(hhh]h}(h]h ]h"]h$]h&]entries](j\#memblock_alloc_try_nid (C function)c.memblock_alloc_try_nidhNtauh1jOhj0hhhNhNubja)}(hhh](jf)}(hxvoid * memblock_alloc_try_nid (phys_addr_t size, phys_addr_t align, phys_addr_t min_addr, phys_addr_t max_addr, int nid)h]jl)}(hvvoid *memblock_alloc_try_nid(phys_addr_t size, phys_addr_t align, phys_addr_t min_addr, phys_addr_t max_addr, int nid)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhjhMubj!)}(hj$h]h*}(hj,hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1j!hj hhhjhMubj)}(hmemblock_alloc_try_nidh]j)}(hmemblock_alloc_try_nidh]hmemblock_alloc_try_nid}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj hhhjhMubj)}(hZ(phys_addr_t size, phys_addr_t align, phys_addr_t min_addr, phys_addr_t max_addr, int nid)h](j)}(hphys_addr_t sizeh](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetj^modnameN classnameNj j )}j! ]j$ )}j j?sbc.memblock_alloc_try_nidasbuh1hhjUubj)}(h h]h }(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubj)}(hsizeh]hsize}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjQubj)}(hphys_addr_t alignh](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetjmodnameN classnameNj j )}j! ]jxc.memblock_alloc_try_nidasbuh1hhjubj)}(h h]h }(hjĖhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(halignh]halign}(hjҖhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjQubj)}(hphys_addr_t min_addrh](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetjmodnameN classnameNj j )}j! ]jxc.memblock_alloc_try_nidasbuh1hhjubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hmin_addrh]hmin_addr}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjQubj)}(hphys_addr_t max_addrh](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetj8modnameN classnameNj j )}j! ]jxc.memblock_alloc_try_nidasbuh1hhj/ubj)}(h h]h }(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubj)}(hmax_addrh]hmax_addr}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjQubj)}(hint nidh](j)}(hinth]hint}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubj)}(hnidh]hnid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjQubeh}(h]h ]h"]h$]h&]jjuh1jhj hhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jkjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jehjhMhjhhubj)}(hhh]h)}(hallocate boot memory blockh]hallocate boot memory block}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](hfunctioneh"]h$]h&]jhjjٗjjٗjjjuh1j`hhhj0hNhNubj)}(hX)**Parameters** ``phys_addr_t size`` size of memory block to be allocated in bytes ``phys_addr_t align`` alignment of the region and block's size ``phys_addr_t min_addr`` the lower bound of the memory region from where the allocation is preferred (phys address) ``phys_addr_t max_addr`` the upper bound of the memory region from where the allocation is preferred (phys address), or ``MEMBLOCK_ALLOC_ACCESSIBLE`` to allocate only from memory limited by memblock.current_limit value ``int nid`` nid of the free area to find, ``NUMA_NO_NODE`` for any node **Description** Public function, provides additional debug information (including caller info), if enabled. This function zeroes the allocated memory. **Return** Virtual address of allocated memory block on success, NULL on failure.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjݗubj)}(hhh](j)}(hC``phys_addr_t size`` size of memory block to be allocated in bytes h](j)}(h``phys_addr_t size``h]h)}(hjh]hphys_addr_t size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjubj3)}(hhh]h)}(h-size of memory block to be allocated in bytesh]h-size of memory block to be allocated in bytes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j2hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h?``phys_addr_t align`` alignment of the region and block's size h](j)}(h``phys_addr_t align``h]h)}(hj;h]hphys_addr_t align}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj9ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhj5ubj3)}(hhh]h)}(h(alignment of the region and block's sizeh]h*alignment of the region and block’s size}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hhjPhMhjQubah}(h]h ]h"]h$]h&]uh1j2hj5ubeh}(h]h ]h"]h$]h&]uh1jhjPhMhjubj)}(ht``phys_addr_t min_addr`` the lower bound of the memory region from where the allocation is preferred (phys address) h](j)}(h``phys_addr_t min_addr``h]h)}(hjth]hphys_addr_t min_addr}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjrubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjnubj3)}(hhh]h)}(hZthe lower bound of the memory region from where the allocation is preferred (phys address)h]hZthe lower bound of the memory region from where the allocation is preferred (phys address)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjubah}(h]h ]h"]h$]h&]uh1j2hjnubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h``phys_addr_t max_addr`` the upper bound of the memory region from where the allocation is preferred (phys address), or ``MEMBLOCK_ALLOC_ACCESSIBLE`` to allocate only from memory limited by memblock.current_limit value h](j)}(h``phys_addr_t max_addr``h]h)}(hjh]hphys_addr_t max_addr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjubj3)}(hhh]h)}(hthe upper bound of the memory region from where the allocation is preferred (phys address), or ``MEMBLOCK_ALLOC_ACCESSIBLE`` to allocate only from memory limited by memblock.current_limit valueh](h_the upper bound of the memory region from where the allocation is preferred (phys address), or }(hjǘhhhNhNubh)}(h``MEMBLOCK_ALLOC_ACCESSIBLE``h]hMEMBLOCK_ALLOC_ACCESSIBLE}(hjϘhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjǘubhE to allocate only from memory limited by memblock.current_limit value}(hjǘhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjĘubah}(h]h ]h"]h$]h&]uh1j2hjubeh}(h]h ]h"]h$]h&]uh1jhjØhMhjubj)}(hH``int nid`` nid of the free area to find, ``NUMA_NO_NODE`` for any node h](j)}(h ``int nid``h]h)}(hjh]hint nid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjubj3)}(hhh]h)}(h;nid of the free area to find, ``NUMA_NO_NODE`` for any nodeh](hnid of the free area to find, }(hjhhhNhNubh)}(h``NUMA_NO_NODE``h]h NUMA_NO_NODE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh for any node}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j2hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1j hjݗubh)}(h**Description**h]j)}(hjGh]h Description}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjݗubh)}(hPublic function, provides additional debug information (including caller info), if enabled. This function zeroes the allocated memory.h]hPublic function, provides additional debug information (including caller info), if enabled. This function zeroes the allocated memory.}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjݗubh)}(h **Return**h]j)}(hjnh]hReturn}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjݗubh)}(hFVirtual address of allocated memory block on success, NULL on failure.h]hFVirtual address of allocated memory block on success, NULL on failure.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjݗubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj0hhhNhNubjP)}(hhh]h}(h]h ]h"]h$]h&]entries](j\&__memblock_alloc_or_panic (C function)c.__memblock_alloc_or_panichNtauh1jOhj0hhhNhNubja)}(hhh](jf)}(hXvoid * __memblock_alloc_or_panic (phys_addr_t size, phys_addr_t align, const char *func)h]jl)}(hVvoid *__memblock_alloc_or_panic(phys_addr_t size, phys_addr_t align, const char *func)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMubj)}(h h]h }(hj™hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj!)}(hj$h]h*}(hjЙhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1j!hjhhhjhMubj)}(h__memblock_alloc_or_panich]j)}(h__memblock_alloc_or_panich]h__memblock_alloc_or_panic}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjݙubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(h7(phys_addr_t size, phys_addr_t align, const char *func)h](j)}(hphys_addr_t sizeh](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetjmodnameN classnameNj j )}j! ]j$ )}j jsbc.__memblock_alloc_or_panicasbuh1hhjubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hsizeh]hsize}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hphys_addr_t alignh](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetjLmodnameN classnameNj j )}j! ]jc.__memblock_alloc_or_panicasbuh1hhjCubj)}(h h]h }(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubj)}(halignh]halign}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hconst char *funch](jr)}(hjW!h]hconst}(hjhhhNhNubah}(h]h ]j~ah"]h$]h&]uh1jqhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj!)}(hj$h]h*}(hjƚhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1j!hjubj)}(hfunch]hfunc}(hjӚhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jkjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jehjhMhjhhubj)}(hhh]h)}(h+Try to allocate memory and panic on failureh]h+Try to allocate memory and panic on failure}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](hfunctioneh"]h$]h&]jhjjjjjjjuh1j`hhhj0hNhNubj)}(hX**Parameters** ``phys_addr_t size`` size of memory block to be allocated in bytes ``phys_addr_t align`` alignment of the region and block's size ``const char *func`` caller func name **Description** This function attempts to allocate memory using memblock_alloc, and in case of failure, it calls panic with the formatted message. This function should not be used directly, please use the macro memblock_alloc_or_panic.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chM hjubj)}(hhh](j)}(hC``phys_addr_t size`` size of memory block to be allocated in bytes h](j)}(h``phys_addr_t size``h]h)}(hj>h]hphys_addr_t size}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj<ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhj8ubj3)}(hhh]h)}(h-size of memory block to be allocated in bytesh]h-size of memory block to be allocated in bytes}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjShMhjTubah}(h]h ]h"]h$]h&]uh1j2hj8ubeh}(h]h ]h"]h$]h&]uh1jhjShMhj5ubj)}(h?``phys_addr_t align`` alignment of the region and block's size h](j)}(h``phys_addr_t align``h]h)}(hjwh]hphys_addr_t align}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjuubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjqubj3)}(hhh]h)}(h(alignment of the region and block's sizeh]h*alignment of the region and block’s size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j2hjqubeh}(h]h ]h"]h$]h&]uh1jhjhMhj5ubj)}(h&``const char *func`` caller func name h](j)}(h``const char *func``h]h)}(hjh]hconst char *func}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chM hjubj3)}(hhh]h)}(hcaller func nameh]hcaller func name}(hjɛhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjśhM hjƛubah}(h]h ]h"]h$]h&]uh1j2hjubeh}(h]h ]h"]h$]h&]uh1jhjśhM hj5ubeh}(h]h ]h"]h$]h&]uh1j hjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chM hjubh)}(hThis function attempts to allocate memory using memblock_alloc, and in case of failure, it calls panic with the formatted message. This function should not be used directly, please use the macro memblock_alloc_or_panic.h]hThis function attempts to allocate memory using memblock_alloc, and in case of failure, it calls panic with the formatted message. This function should not be used directly, please use the macro memblock_alloc_or_panic.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj0hhhNhNubjP)}(hhh]h}(h]h ]h"]h$]h&]entries](j\memblock_free_late (C function)c.memblock_free_latehNtauh1jOhj0hhhNhNubja)}(hhh](jf)}(hhMubj)}(hmemblock_free_lateh]j)}(hmemblock_free_lateh]hmemblock_free_late}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubah}(h]h ](jjeh"]h$]h&]jjuh1jhj,hhhj>hMubj)}(h$(phys_addr_t base, phys_addr_t size)h](j)}(hphys_addr_t baseh](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetjrmodnameN classnameNj j )}j! ]j$ )}j jSsbc.memblock_free_lateasbuh1hhjiubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubj)}(hbaseh]hbase}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjeubj)}(hphys_addr_t sizeh](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetjmodnameN classnameNj j )}j! ]jc.memblock_free_lateasbuh1hhjubj)}(h h]h }(hj؜hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hsizeh]hsize}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjeubeh}(h]h ]h"]h$]h&]jjuh1jhj,hhhj>hMubeh}(h]h ]h"]h$]h&]jjjuh1jkjjhj(hhhj>hMubah}(h]j#ah ](jjeh"]h$]h&]jj)jhuh1jehj>hMhj%hhubj)}(hhh]h)}(h&free pages directly to buddy allocatorh]h&free pages directly to buddy allocator}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhj hhubah}(h]h ]h"]h$]h&]uh1jhj%hhhj>hMubeh}(h]h ](hfunctioneh"]h$]h&]jhjj(jj(jjjuh1j`hhhj0hNhNubj)}(hXR**Parameters** ``phys_addr_t base`` phys starting address of the boot memory block ``phys_addr_t size`` size of the boot memory block in bytes **Description** This is only useful when the memblock allocator has already been torn down, but we are still initializing the system. Pages are released directly to the buddy allocator.h](h)}(h**Parameters**h]j)}(hj2h]h Parameters}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhj,ubj)}(hhh](j)}(hE``phys_addr_t base`` phys starting address of the boot memory block h](j)}(h``phys_addr_t base``h]h)}(hjQh]hphys_addr_t base}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhjOubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjKubj3)}(hhh]h)}(h/phys starting address of the boot memory blockh]h/phys starting address of the boot memory block}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjfhMhjgubah}(h]h ]h"]h$]h&]uh1j2hjKubeh}(h]h ]h"]h$]h&]uh1jhjfhMhjHubj)}(h<``phys_addr_t size`` size of the boot memory block in bytes h](j)}(h``phys_addr_t size``h]h)}(hjh]hphys_addr_t size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjubj3)}(hhh]h)}(h&size of the boot memory block in bytesh]h&size of the boot memory block in bytes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j2hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjHubeh}(h]h ]h"]h$]h&]uh1j hj,ubh)}(h**Description**h]j)}(hjŝh]h Description}(hjǝhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjÝubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhj,ubh)}(hThis is only useful when the memblock allocator has already been torn down, but we are still initializing the system. Pages are released directly to the buddy allocator.h]hThis is only useful when the memblock allocator has already been torn down, but we are still initializing the system. Pages are released directly to the buddy allocator.}(hj۝hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhj,ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj0hhhNhNubjP)}(hhh]h}(h]h ]h"]h$]h&]entries](j\-memblock_estimated_nr_free_pages (C function)"c.memblock_estimated_nr_free_pageshNtauh1jOhj0hhhNhNubja)}(hhh](jf)}(h5unsigned long memblock_estimated_nr_free_pages (void)h]jl)}(h4unsigned long memblock_estimated_nr_free_pages(void)h](j)}(hunsignedh]hunsigned}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMXubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMXubj)}(hlongh]hlong}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMXubj)}(h h]h }(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMXubj)}(h memblock_estimated_nr_free_pagesh]j)}(h memblock_estimated_nr_free_pagesh]h memblock_estimated_nr_free_pages}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMXubj)}(h(void)h]j)}(hvoidh]j)}(hvoidh]hvoid}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubah}(h]h ]h"]h$]h&]noemphjjuh1jhj[ubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMXubeh}(h]h ]h"]h$]h&]jjjuh1jkjjhjhhhjhMXubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jehjhMXhjhhubj)}(hhh]h)}(hAreturn estimated number of free pages from memblock point of viewh]hAreturn estimated number of free pages from memblock point of view}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMXhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMXubeh}(h]h ](hfunctioneh"]h$]h&]jhjjjjjjjuh1j`hhhj0hNhNubj)}(hX**Parameters** ``void`` no arguments **Description** During bootup, subsystems might need a rough estimate of the number of free pages in the whole system, before precise numbers are available from the buddy. Especially with CONFIG_DEFERRED_STRUCT_PAGE_INIT, the numbers obtained from the buddy might be very imprecise during bootup. **Return** An estimated number of free pages from memblock point of view.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chM\hjubj)}(hhh]j)}(h``void`` no arguments h](j)}(h``void``h]h)}(hjΞh]hvoid}(hjОhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj̞ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chKhjȞubj3)}(hhh]h)}(h no argumentsh]h no arguments}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j2hjȞubeh}(h]h ]h"]h$]h&]uh1jhjhKhjŞubah}(h]h ]h"]h$]h&]uh1j hjubh)}(h**Description**h]j)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chKhjubh)}(hXDuring bootup, subsystems might need a rough estimate of the number of free pages in the whole system, before precise numbers are available from the buddy. Especially with CONFIG_DEFERRED_STRUCT_PAGE_INIT, the numbers obtained from the buddy might be very imprecise during bootup.h]hXDuring bootup, subsystems might need a rough estimate of the number of free pages in the whole system, before precise numbers are available from the buddy. Especially with CONFIG_DEFERRED_STRUCT_PAGE_INIT, the numbers obtained from the buddy might be very imprecise during bootup.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMYhjubh)}(h **Return**h]j)}(hj0h]hReturn}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chM^hjubh)}(h>An estimated number of free pages from memblock point of view.h]h>An estimated number of free pages from memblock point of view.}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chM`hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj0hhhNhNubjP)}(hhh]h}(h]h ]h"]h$]h&]entries](j\&memblock_is_region_memory (C function)c.memblock_is_region_memoryhNtauh1jOhj0hhhNhNubja)}(hhh](jf)}(hSbool __init_memblock memblock_is_region_memory (phys_addr_t base, phys_addr_t size)h]jl)}(hRbool __init_memblock memblock_is_region_memory(phys_addr_t base, phys_addr_t size)h](j)}(hjOh]hbool}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqhhhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqhhhjhMubh__init_memblock}(hjqhhhNhNubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqhhhjhMubj)}(hmemblock_is_region_memoryh]j)}(hmemblock_is_region_memoryh]hmemblock_is_region_memory}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjqhhhjhMubj)}(h$(phys_addr_t base, phys_addr_t size)h](j)}(hphys_addr_t baseh](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hjƟhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjßubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetjȟmodnameN classnameNj j )}j! ]j$ )}j jsbc.memblock_is_region_memoryasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hbaseh]hbase}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hphys_addr_t sizeh](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetjmodnameN classnameNj j )}j! ]jc.memblock_is_region_memoryasbuh1hhj ubj)}(h h]h }(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hsizeh]hsize}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjqhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jkjjhjmhhhjhMubah}(h]jhah ](jjeh"]h$]h&]jj)jhuh1jehjhMhjjhhubj)}(hhh]h)}(h'check if a region is a subset of memoryh]h'check if a region is a subset of memory}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjchhubah}(h]h ]h"]h$]h&]uh1jhjjhhhjhMubeh}(h]h ](hfunctioneh"]h$]h&]jhjj~jj~jjjuh1j`hhhj0hNhNubj)}(h**Parameters** ``phys_addr_t base`` base of region to check ``phys_addr_t size`` size of region to check **Description** Check if the region [**base**, **base** + **size**) is a subset of a memory block. **Return** 0 if false, non-zero if trueh](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjubj)}(hhh](j)}(h-``phys_addr_t base`` base of region to check h](j)}(h``phys_addr_t base``h]h)}(hjh]hphys_addr_t base}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjubj3)}(hhh]h)}(hbase of region to checkh]hbase of region to check}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j2hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h-``phys_addr_t size`` size of region to check h](j)}(h``phys_addr_t size``h]h)}(hjh]hphys_addr_t size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjޠubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjڠubj3)}(hhh]h)}(hsize of region to checkh]hsize of region to check}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j2hjڠubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1j hjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjubh)}(hRCheck if the region [**base**, **base** + **size**) is a subset of a memory block.h](hCheck if the region [}(hj1hhhNhNubj)}(h**base**h]hbase}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubh, }(hj1hhhNhNubj)}(h**base**h]hbase}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubh + }(hj1hhhNhNubj)}(h**size**h]hsize}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubh ) is a subset of a memory block.}(hj1hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjubh)}(h **Return**h]j)}(hjxh]hReturn}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chM hjubh)}(h0 if false, non-zero if trueh]h0 if false, non-zero if true}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj0hhhNhNubjP)}(hhh]h}(h]h ]h"]h$]h&]entries](j\(memblock_is_region_reserved (C function)c.memblock_is_region_reservedhNtauh1jOhj0hhhNhNubja)}(hhh](jf)}(hUbool __init_memblock memblock_is_region_reserved (phys_addr_t base, phys_addr_t size)h]jl)}(hTbool __init_memblock memblock_is_region_reserved(phys_addr_t base, phys_addr_t size)h](j)}(hjOh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMubj)}(h h]h }(hjˡhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjʡhMubh__init_memblock}(hjhhhNhNubj)}(h h]h }(hjݡhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjʡhMubj)}(hmemblock_is_region_reservedh]j)}(hmemblock_is_region_reservedh]hmemblock_is_region_reserved}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjʡhMubj)}(h$(phys_addr_t base, phys_addr_t size)h](j)}(hphys_addr_t baseh](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetjmodnameN classnameNj j )}j! ]j$ )}j jsbc.memblock_is_region_reservedasbuh1hhjubj)}(h h]h }(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hbaseh]hbase}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hphys_addr_t sizeh](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetjZmodnameN classnameNj j )}j! ]j*c.memblock_is_region_reservedasbuh1hhjQubj)}(h h]h }(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubj)}(hsizeh]hsize}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjʡhMubeh}(h]h ]h"]h$]h&]jjjuh1jkjjhjhhhjʡhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jehjʡhMhjhhubj)}(hhh]h)}(h,check if a region intersects reserved memoryh]h,check if a region intersects reserved memory}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjʡhMubeh}(h]h ](hfunctioneh"]h$]h&]jhjjƢjjƢjjjuh1j`hhhj0hNhNubj)}(hX **Parameters** ``phys_addr_t base`` base of region to check ``phys_addr_t size`` size of region to check **Description** Check if the region [**base**, **base** + **size**) intersects a reserved memory block. **Return** True if they intersect, false if not.h](h)}(h**Parameters**h]j)}(hjТh]h Parameters}(hjҢhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj΢ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjʢubj)}(hhh](j)}(h-``phys_addr_t base`` base of region to check h](j)}(h``phys_addr_t base``h]h)}(hjh]hphys_addr_t base}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjubj3)}(hhh]h)}(hbase of region to checkh]hbase of region to check}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j2hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h-``phys_addr_t size`` size of region to check h](j)}(h``phys_addr_t size``h]h)}(hj(h]hphys_addr_t size}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj&ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhj"ubj3)}(hhh]h)}(hsize of region to checkh]hsize of region to check}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj=hMhj>ubah}(h]h ]h"]h$]h&]uh1j2hj"ubeh}(h]h ]h"]h$]h&]uh1jhj=hMhjubeh}(h]h ]h"]h$]h&]uh1j hjʢubh)}(h**Description**h]j)}(hjch]h Description}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjʢubh)}(hWCheck if the region [**base**, **base** + **size**) intersects a reserved memory block.h](hCheck if the region [}(hjyhhhNhNubj)}(h**base**h]hbase}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubh, }(hjyhhhNhNubj)}(h**base**h]hbase}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubh + }(hjyhhhNhNubj)}(h**size**h]hsize}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubh%) intersects a reserved memory block.}(hjyhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjʢubh)}(h **Return**h]j)}(hjh]hReturn}(hj£hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjʢubh)}(h%True if they intersect, false if not.h]h%True if they intersect, false if not.}(hj֣hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chM hjʢubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj0hhhNhNubjP)}(hhh]h}(h]h ]h"]h$]h&]entries](j\memblock_free_all (C function)c.memblock_free_allhNtauh1jOhj0hhhNhNubja)}(hhh](jf)}(hvoid memblock_free_all (void)h]jl)}(hvoid memblock_free_all(void)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chM` ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM` ubj)}(hmemblock_free_allh]j)}(hmemblock_free_allh]hmemblock_free_all}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhM` ubj)}(h(void)h]j)}(hvoidh]j)}(hvoidh]hvoid}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&]noemphjjuh1jhj:ubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhM` ubeh}(h]h ]h"]h$]h&]jjjuh1jkjjhjhhhjhM` ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jehjhM` hjhhubj)}(hhh]h)}(h)release free pages to the buddy allocatorh]h)release free pages to the buddy allocator}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chM` hjihhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM` ubeh}(h]h ](hfunctioneh"]h$]h&]jhjjjjjjjuh1j`hhhj0hNhNubj)}(h'**Parameters** ``void`` no argumentsh](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMd hjubj)}(hhh]j)}(h``void`` no argumentsh](j)}(h``void``h]h)}(hjh]hvoid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMf hjubj3)}(hhh]h)}(h no argumentsh]h no arguments}(hjƤhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chKhjäubah}(h]h ]h"]h$]h&]uh1j2hjubeh}(h]h ]h"]h$]h&]uh1jhj¤hMf hjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj0hhhNhNubjP)}(hhh]h}(h]h ]h"]h$]h&]entries](j\%reserve_mem_find_by_name (C function)c.reserve_mem_find_by_namehNtauh1jOhj0hhhNhNubja)}(hhh](jf)}(hVint reserve_mem_find_by_name (const char *name, phys_addr_t *start, phys_addr_t *size)h]jl)}(hUint reserve_mem_find_by_name(const char *name, phys_addr_t *start, phys_addr_t *size)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chM ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM ubj)}(hreserve_mem_find_by_nameh]j)}(hreserve_mem_find_by_nameh]hreserve_mem_find_by_name}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhM ubj)}(h9(const char *name, phys_addr_t *start, phys_addr_t *size)h](j)}(hconst char *nameh](jr)}(hjW!h]hconst}(hjDhhhNhNubah}(h]h ]j~ah"]h$]h&]uh1jqhj@ubj)}(h h]h }(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubj)}(hcharh]hchar}(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubj)}(h h]h }(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubj!)}(hj$h]h*}(hj{hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1j!hj@ubj)}(hnameh]hname}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj<ubj)}(hphys_addr_t *starth](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetjmodnameN classnameNj j )}j! ]j$ )}j j*sbc.reserve_mem_find_by_nameasbuh1hhjubj)}(h h]h }(hjĥhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj!)}(hj$h]h*}(hjҥhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1j!hjubj)}(hstarth]hstart}(hjߥhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj<ubj)}(hphys_addr_t *sizeh](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainhreftypej reftargetjmodnameN classnameNj j )}j! ]jc.reserve_mem_find_by_nameasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj!)}(hj$h]h*}(hj'hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1j!hjubj)}(hsizeh]hsize}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj<ubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhM ubeh}(h]h ]h"]h$]h&]jjjuh1jkjjhjhhhjhM ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jehjhM hjhhubj)}(hhh]h)}(h-Find reserved memory region with a given nameh]h-Find reserved memory region with a given name}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chM hj[hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM ubeh}(h]h ](hfunctioneh"]h$]h&]jhjjvjjvjjjuh1j`hhhj0hNhNubj)}(hXU**Parameters** ``const char *name`` The name that is attached to a reserved memory region ``phys_addr_t *start`` If found, holds the start address ``phys_addr_t *size`` If found, holds the size of the address. **Description** **start** and **size** are only updated if **name** is found. **Return** 1 if found or 0 if not found.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chM hjzubj)}(hhh](j)}(hK``const char *name`` The name that is attached to a reserved memory region h](j)}(h``const char *name``h]h)}(hjh]hconst char *name}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chM hjubj3)}(hhh]h)}(h5The name that is attached to a reserved memory regionh]h5The name that is attached to a reserved memory region}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1j2hjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(h9``phys_addr_t *start`` If found, holds the start address h](j)}(h``phys_addr_t *start``h]h)}(hjئh]hphys_addr_t *start}(hjڦhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj֦ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chM hjҦubj3)}(hhh]h)}(h!If found, holds the start addressh]h!If found, holds the start address}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1j2hjҦubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(h?``phys_addr_t *size`` If found, holds the size of the address. h](j)}(h``phys_addr_t *size``h]h)}(hjh]hphys_addr_t *size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chM hj ubj3)}(hhh]h)}(h(If found, holds the size of the address.h]h(If found, holds the size of the address.}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj&hM hj'ubah}(h]h ]h"]h$]h&]uh1j2hj ubeh}(h]h ]h"]h$]h&]uh1jhj&hM hjubeh}(h]h ]h"]h$]h&]uh1j hjzubh)}(h**Description**h]j)}(hjLh]h Description}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chM hjzubh)}(h=**start** and **size** are only updated if **name** is found.h](j)}(h **start**h]hstart}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubh and }(hjbhhhNhNubj)}(h**size**h]hsize}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubh are only updated if }(hjbhhhNhNubj)}(h**name**h]hname}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubh is found.}(hjbhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chM hjzubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chM hjzubh)}(h1 if found or 0 if not found.h]h1 if found or 0 if not found.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chM hjzubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj0hhhNhNubjP)}(hhh]h}(h]h ]h"]h$]h&]entries](j\(reserve_mem_release_by_name (C function)c.reserve_mem_release_by_namehNtauh1jOhj0hhhNhNubja)}(hhh](jf)}(h2int reserve_mem_release_by_name (const char *name)h]jl)}(h1int reserve_mem_release_by_name(const char *name)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chM ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM ubj)}(hreserve_mem_release_by_nameh]j)}(hreserve_mem_release_by_nameh]hreserve_mem_release_by_name}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhM ubj)}(h(const char *name)h]j)}(hconst char *nameh](jr)}(hjW!h]hconst}(hj'hhhNhNubah}(h]h ]j~ah"]h$]h&]uh1jqhj#ubj)}(h h]h }(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubj)}(hcharh]hchar}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubj)}(h h]h }(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubj!)}(hj$h]h*}(hj^hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1j!hj#ubj)}(hnameh]hname}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhM ubeh}(h]h ]h"]h$]h&]jjjuh1jkjjhjhhhjhM ubah}(h]jݧah ](jjeh"]h$]h&]jj)jhuh1jehjhM hjߧhhubj)}(hhh]h)}(h0Release reserved memory region with a given nameh]h0Release reserved memory region with a given name}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chM hjhhubah}(h]h ]h"]h$]h&]uh1jhjߧhhhjhM ubeh}(h]h ](hfunctioneh"]h$]h&]jhjjjjjjjuh1j`hhhj0hNhNubj)}(hX:**Parameters** ``const char *name`` The name that is attatched to a reserved memory region **Description** Forcibly release the pages in the reserved memory region so that those memory can be used as free memory. After released the reserved region size becomes 0. **Return** 1 if released or 0 if not found.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chM hjubj)}(hhh]j)}(hL``const char *name`` The name that is attatched to a reserved memory region h](j)}(h``const char *name``h]h)}(hj֨h]hconst char *name}(hjبhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjԨubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chM hjШubj3)}(hhh]h)}(h6The name that is attatched to a reserved memory regionh]h6The name that is attatched to a reserved memory region}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1j2hjШubeh}(h]h ]h"]h$]h&]uh1jhjhM hjͨubah}(h]h ]h"]h$]h&]uh1j hjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chM hjubh)}(hForcibly release the pages in the reserved memory region so that those memory can be used as free memory. After released the reserved region size becomes 0.h]hForcibly release the pages in the reserved memory region so that those memory can be used as free memory. After released the reserved region size becomes 0.}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chM hjubh)}(h **Return**h]j)}(hj8h]hReturn}(hj:hhhNhNubah}(h]h ]h"]h$ ]h&]uh1jhj6ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chM hjubh)}(h 1 if released or 0 if not found.h]h 1 if released or 0 if not found.}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj0hhhNhNubeh}(h]functions-and-structuresah ]h"]functions and structuresah$]h&]uh1hhhhhhhhKubeh}(h]boot-time-memory-managementah ]h"]boot time memory managementah$]h&]uh1hhhhhhhhKubeh}(h]h ]h"]h$]h&]sourcehuh1hcurrent_sourceN current_lineNsettingsdocutils.frontendValues)}(hN generatorN datestampN source_linkN source_urlN toc_backlinksentryfootnote_backlinksK sectnum_xformKstrip_commentsNstrip_elements_with_classesN strip_classesN report_levelK halt_levelKexit_status_levelKdebugNwarning_streamN tracebackinput_encoding utf-8-siginput_encoding_error_handlerstrictoutput_encodingutf-8output_encoding_error_handlerjerror_encodingutf-8error_encoding_error_handlerbackslashreplace language_codeenrecord_dependenciesNconfigN id_prefixhauto_id_prefixid dump_settingsNdump_internalsNdump_transformsNdump_pseudo_xmlNexpose_internalsNstrict_visitorN_disable_configN_sourceh _destinationN _config_files]7/var/lib/git/docbuild/linux/Documentation/docutils.confafile_insertion_enabled raw_enabledKline_length_limitM'pep_referencesN pep_base_urlhttps://peps.python.org/pep_file_url_templatepep-%04drfc_referencesN rfc_base_url&https://datatracker.ietf.org/doc/html/ tab_widthKtrim_footnote_reference_spacesyntax_highlightlong smart_quotessmartquotes_locales]character_level_inline_markupdoctitle_xform docinfo_xformKsectsubtitle_xform image_loadinglinkembed_stylesheetcloak_email_addressessection_self_linkenvNubreporterNindirect_targets]substitution_defs}substitution_names}refnames}refids}nameids}(jqjnj-j*jijfu nametypes}(jqj-jiuh}(jnhj*jOjfj0j^jgjjjjj j jW j\ j j jjjpjujjjTjYjjjjjjjJjOjjj j j"j"jc$jh$j&j &j'j'j(j(j)j)j.j.je2jj2j6j6j[:j`:j];jb;ja>jf>j;Aj@AjEjEjIjIj'Mj,MjpOjuOjQj!Qj:Uj?Uj Wj%Wj YjYj\j\j^j^j`j`jbjbjdjejfjfjOijTijbkjgkj